• Android图表开发——AChartEngine


    Android图表控件的开发

    曾经开发过一个小程序,在Android电视机上面开发一个APP,用于显示一些统计图表的信息。最后找来找去基于Android Native开发有AChartEngine现成的组件可用,于是就直接导入jar包,看api文档进行了开发。当然这只是一个客户端程序,数据的来源需要通过服务端程序获得,项目中通过wcf返回json格式的数据。

    代码片段

    new Thread(new Runnable() {
        @Override
        public void run() {
            SoapObject soapObject = Util.callWS(nameSpace, methodName2,wsdl, null);
            if (soapObject != null) {
                String result = soapObject.getProperty(0).toString();
                Message msg = new Message();
                msg.what = chart2;
                msg.obj = result;
                handler.sendMessage(msg);
            }
        }
    }).start();
    /**
         * @param nameSpace
         *            WS的命名空间
         * @param methodName
         *            WS的方法名
         * @param wsdl
         *            WS的wsdl的完整路径名
         * @param params
         *            WS的方法所需要的参数
         * @return SoapObject对象
         */
        public static SoapObject callWS(String nameSpace, String methodName,
                final String wsdl, Map<String, Object> params) {
            final String SOAP_ACTION = nameSpace + "/service/" + methodName;
            SoapObject soapObject = new SoapObject(nameSpace, methodName);
            if ((params != null) && (!params.isEmpty())) {
                Iterator<Entry<String, Object>> it = params.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry<String, Object> e = (Map.Entry<String, Object>) it
                            .next();
                    soapObject.addProperty(e.getKey(), e.getValue());
                }
            }
    
            final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.bodyOut = soapObject;
            envelope.dotNet = true;// 兼容.NET开发的Web Service
            envelope.setOutputSoapObject(soapObject);
            try {
                HttpTransportSE ht = new HttpTransportSE(wsdl);
                ht.call(SOAP_ACTION, envelope);
                if (envelope.getResponse() != null) {
                    SoapObject result = (SoapObject) envelope.bodyIn;
                    ht = null;
                    return result;
                } else {
                    return null;
                }
            } catch (Exception e) {
                Log.e("error", e.getMessage());
                return null;
            }
        }
    String result2 = (String) msg.obj;
    int[] colors2 = new int[] { Color.argb(255, 10, 44, 81),Color.argb(255, 182, 34, 49) };
    DefaultRenderer renderer2 = SexChart.buildCategoryRenderer(colors2);
    
    // String result =
    // "{"Result_List":[ { "SEX":"其它","NUM":"1"}, {"SEX":"男","NUM":"37"}, {"SEX":"女","NUM":"2"}]}";
    List<Map<String, Object>> list2 = Util.convertJSON2List(result2, "Result_List", new String[] { "SEX", "NUM" });
    CategorySeries categorySeries = new CategorySeries("Vehicles Chart");
    for (Map<String, Object> map : list2) {
        categorySeries.add(map.get("SEX").toString(),
        Double.parseDouble(map.get("NUM").toString()));
    }
    View view2 = ChartFactory.getPieChartView(Main.this,categorySeries, renderer2);
    if (view2 != null) {
       layout01.removeAllViews();
       layout01.destroyDrawingCache();
       layout01.addView(view2);
    } else {
       Toast.makeText(Main.this, "统计结果获取失败。", Toast.LENGTH_LONG).show();
    }
    public static List<Map<String, Object>> convertJSON2List(String result,String name, String[] fields) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            JSONArray array = new JSONObject(result).getJSONArray(name);
            for (int i = 0; i < array.length(); i++) {
               JSONObject object = (JSONObject) array.opt(i);
               Map<String, Object> map = new HashMap<String, Object>();
                   for (String str : fields) {
                       map.put(str, object.get(str));
                   }
                   list.add(map);
               }
            } catch (JSONException e) {
                Log.e("error", e.getMessage());
            }
        return list;
    }

    效果图

    参考资料:

    http://www.achartengine.org/content/demo.html

  • 相关阅读:
    [QT][待解决问题]对话框ui载入卡顿问题
    [QT] Tab键切换焦点顺序
    [QT][问题记录]发布软件时遇到的问题
    [QT][转载] Qt信号和槽
    [QT][转载]Qt:使用C++还是QML
    [qt][问题记录] 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
    [QT]安装中出现的问题(安装qt5.8,出现Could not start:"{0,3010,1603,5100} msiexec ...")
    [转载]Lwip之IP/MAC地址冲突检测
    转载:TCP连接的状态详解以及故障排查
    git push (第一次) (转)
  • 原文地址:https://www.cnblogs.com/guwei4037/p/5583353.html
Copyright © 2020-2023  润新知