zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    谁把天才变成了魔兽
    NetBeans 时事通讯(刊号 # 35 Nov 20, 2008)
    Java Annotation 手册
    《程序设计实践》读书笔记一
    5分钟让你明白金融危机爆发原因
    NetBeans 6.5 正式版可以下载了!
    Java Annotation 入门
    有关睡觉的学问
    oracle sql日期比较:
    C++编写安全OCX,IE不弹出安全提示
  • 原文地址:https://www.cnblogs.com/guwei4037/p/5583353.html
Copyright © 2011-2022 走看看