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().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(, , , ),Color.argb(, , , ) };
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 = ; 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

最新文章

  1. MySQL &#183; 答疑解惑 &#183; MySQL 锁问题最佳实践
  2. 再谈缓存和Redis
  3. PD PDM模型中关系设置为概念模型样式
  4. position定位
  5. centos 命令大全
  6. codeforce626D (概率)
  7. java笔记--使用SwingWoker类完成耗时操作
  8. 关于 VS 无法转到定义和无法转到使用的问题
  9. CIO谈:基于K2 BPM平台怎么做报销?
  10. xcode6默认不支持armv7s
  11. MyTask4
  12. mysql的并发处理机制_上篇
  13. 怎样在一个HTML中嵌入另一个HTML页面(iframe标签用法)
  14. ajax 常用功能 结构分解
  15. ASP.NET MVC用户登录(Memcache存储用户登录信息)
  16. 恶意代码分析-使用apataDNS+inetsim模拟网络环境
  17. 编译小米mini openwrt
  18. 企业项目开发--本地缓存guava cache(2)
  19. 浅谈web缓存(转)
  20. findbug、p3c、checkstyle、sonar安装使用

热门文章

  1. Scripting.FileSystemObject对象的详细技巧指南
  2. Node.js+Express on IIS(续)
  3. 在lua环境中使用protobuf
  4. C语言界面显示水波纹效果
  5. 如果你的eclipse在每次run或debug时都莫名其妙的做一件事
  6. QT基础:QT 定时器学习
  7. Thinkphp 模板中使用自定义函数的方法
  8. 史上最强大的python selenium webdriver的包装
  9. MTK 隐藏通知栏
  10. 从Python学习中得到的一点启发 - Java逆向索引ArrayList