1. ackage cn.com.pcgroup.<a href="http://lib.csdn.net/base/15" class="replace_word" title="Android知识库" target="_blank" style="color:#df3434; font-weight:bold;">android</a>.browser.module.onlineproduct;
  2. import <a href="http://lib.csdn.net/base/17" class="replace_word" title="Java EE知识库" target="_blank" style="color:#df3434; font-weight:bold;">java</a>.io.IOException;
  3. import java.net.HttpURLConnection;
  4. import java.net.URL;
  5. import java.nio.ByteBuffer;
  6. import java.nio.channels.Channels;
  7. import java.nio.channels.ReadableByteChannel;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.Iterator;
  11. import java.util.List;
  12. import java.util.Map;
  13. import java.util.concurrent.Callable;
  14. import java.util.concurrent.ExecutorService;
  15. import java.util.concurrent.Executors;
  16. import java.util.concurrent.Future;
  17. import org.json.JSONArray;
  18. import org.json.JSONObject;
  19. import android.app.Activity;
  20. import android.os.Bundle;
  21. import android.util.Log;
  22. import android.view.LayoutInflater;
  23. import android.view.View;
  24. import android.view.ViewGroup;
  25. import android.widget.BaseAdapter;
  26. import android.widget.ListView;
  27. import android.widget.TextView;
  28. import cn.com.pcgroup.android.browser.R;
  29. public class Information extends Activity {
  30. private static final String baseUrl = "http://192.168.199.45/1.txt";
  31. private static final String TAG = Information.class.getSimpleName();
  32. private static LayoutInflater mInflater;
  33. private static String json;
  34. private Map<String, String> infoMap = new HashMap<String, String>();
  35. private static Map<Index, String> itemMap = new HashMap<Index, String>();
  36. @Override
  37. protected void onCreate(Bundle savedInstanceState) {
  38. super.onCreate(savedInstanceState);
  39. setContentView(R.layout.online_product_information);
  40. ListView list = (ListView) findViewById(R.id.list);
  41. mInflater = getWindow().getLayoutInflater();
  42. try {
  43. json = downloadJSON().get();
  44. Log.v(TAG, json);
  45. JSONObject jsonObject = new JSONObject(json);
  46. handleJson(jsonObject, infoMap);
  47. Index i = new Index();
  48. i.setKey("image");
  49. i.setPos(1);
  50. String result = itemMap.get(i);
  51. Log.v(TAG, "result = " + result);
  52. Log.v(TAG, "productId = " + infoMap.get("productId"));
  53. Log.v(TAG, "itemCount = " + itemCount);
  54. InforAdapter adapter = new InforAdapter(itemCount);
  55. list.setAdapter(adapter);
  56. } catch (Exception e) {
  57. throw new RuntimeException(e);
  58. }
  59. }
  60. private void handleJson(JSONObject jsonObject, Map<String, String> infoMap) {
  61. if (jsonObject == null || infoMap == null)
  62. return;
  63. @SuppressWarnings("unchecked")
  64. Iterator<String> it = jsonObject.keys();
  65. while (it.hasNext()) {
  66. String key = it.next();
  67. JSONArray array = jsonObject.optJSONArray(key);
  68. // 假如只是JSONObject
  69. if (array == null)
  70. infoMap.put(key, jsonObject.optString(key));
  71. // 是JSONArray,则递归处理
  72. else {
  73. handleJsonArray(array, itemMap);
  74. }
  75. }
  76. }
  77. private static class Index {
  78. private int pos = 0;
  79. private String key = new String();
  80. public Index() {
  81. }
  82. public Index(int pos, String key) {
  83. this.pos = pos;
  84. this.key = key;
  85. }
  86. @Override
  87. public int hashCode() {
  88. final int prime = 31;
  89. int result = 1;
  90. result = prime * result + ((key == null) ? 0 : key.hashCode());
  91. result = prime * result + pos;
  92. return result;
  93. }
  94. @Override
  95. public boolean equals(Object obj) {
  96. if (obj == this)
  97. return true;
  98. if (obj instanceof Index)
  99. return ((Index) obj).pos == pos
  100. && (((Index) obj).key).equals(key);
  101. return false;
  102. }
  103. public int getPos() {
  104. return pos;
  105. }
  106. public void setPos(int pos) {
  107. this.pos = pos;
  108. }
  109. public String getKey() {
  110. return key;
  111. }
  112. public void setKey(String key) {
  113. this.key = key;
  114. }
  115. }
  116. private int itemCount = 0;
  117. private int handleJsonArray(JSONArray array, Map<Index, String> map) {
  118. if (array == null)
  119. return itemCount;
  120. int len = array.length();
  121. itemCount = len;
  122. for (int i = 0; i < len; i++) {
  123. JSONObject obj = (JSONObject) array.opt(i);
  124. @SuppressWarnings("unchecked")
  125. Iterator<String> it = obj.keys();
  126. while (it.hasNext()) {
  127. String key = it.next();
  128. JSONArray a = obj.optJSONArray(key);
  129. if (a != null)
  130. handleJsonArray(a, itemMap);
  131. else {
  132. Index index = new Index(i, key);
  133. itemMap.put(index, obj.optString(key));
  134. }
  135. }
  136. }
  137. return itemCount;
  138. }
  139. private static class InforAdapter extends BaseAdapter {
  140. private int count; // 有几条数据
  141. String[] sa = { "id", "title", "image", "channel" };
  142. public InforAdapter(int count) {
  143. this.count = count;
  144. }
  145. @Override
  146. public int getCount() {
  147. return count;
  148. }
  149. @Override
  150. public Object getItem(int position) {
  151. return position;
  152. }
  153. @Override
  154. public long getItemId(int position) {
  155. return position;
  156. }
  157. @Override
  158. public View getView(int position, View convertView, ViewGroup parent) {
  159. if (convertView == null) {
  160. convertView = mInflater.inflate(R.layout.information_layout,
  161. null);
  162. }
  163. TextView t = (TextView) convertView.findViewById(R.id.text);
  164. t.setTextSize(20);
  165. Index i = new Index(position, "title");
  166. t.setText(itemMap.get(i));
  167. return convertView;
  168. }
  169. }
  170. @SuppressWarnings({ "finally", "unused" })
  171. private String getStringFromServer(final String url){
  172. ReadableByteChannel channel = null;
  173. StringBuilder sb = null;
  174. try {
  175. URL u = new URL(url);
  176. HttpURLConnection conn = (HttpURLConnection) u.openConnection();
  177. channel = Channels.newChannel(conn.getInputStream());
  178. ByteBuffer buffer = ByteBuffer.allocate(1024);
  179. sb = new StringBuilder();
  180. while(channel.read(buffer) != -1){
  181. buffer.flip();
  182. while(buffer.hasRemaining())
  183. sb.append((char)buffer.get());
  184. buffer.clear();
  185. }
  186. } catch (Exception e) {
  187. throw new RuntimeException(e);
  188. }finally{
  189. try {
  190. channel.close();
  191. } catch (IOException e) {
  192. e.printStackTrace();
  193. }finally{
  194. return sb.toString();
  195. }
  196. }
  197. }
  198. private Future<String> downloadJSON(){
  199. ExecutorService exec = Executors.newCachedThreadPool();
  200. class DownLoadTask implements Callable<String>{
  201. @SuppressWarnings("static-access")
  202. @Override
  203. public String call() {
  204. json = OnlineApiService.getInstance(Information.this).getJSONString(baseUrl);
  205. return json;
  206. }
  207. }
  208. Future<String> future = exec.submit(new DownLoadTask());
  209. exec.shutdown();
  210. return future;
  211. }
  212. }

android通用JSON解析的更多相关文章

  1. 一个.NET通用JSON解析/构建类的实现(c#)转

    转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...

  2. 一个.NET通用JSON解析/构建类的实…

    一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...

  3. C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题

    C#字符串数组排序   //排序只带字符的数组,不带数字的 private   string[]   aa   ={ "a ", "c ", "b & ...

  4. Android 之json解析

    JSON(JavaScript Object Notation) 定义:字符串 键值对 解析方法有JSON,谷歌GSON,阿里巴巴FastJSON(推荐) 一种轻量级的数据交换格式,具有良好的可读和便 ...

  5. Android 中Json解析的几种框架(Gson、Jackson、FastJson、LoganSquare)使用与对比

    介绍 移动互联网产品与服务器端通信的数据格式,如果没有特殊的需求的话,一般选择使用JSON格式,Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高 ...

  6. Android之JSON解析

    做个Android网络编程的同学一定对于JSON解析一点都不陌生,因为现在我们通过手机向服务器请求资源,服务器给我们返回的数据资源一般都是以JSON格式返回,当然还有一些通过XML格式返回,相对JSO ...

  7. Android项目--Json解析

    在过去的一段时间里,我希望做一个天气的应用,但是由于老版的天气接口已经不能用了.只能更新到2014年3月4日. 不过有些东西,哪来学习一下,也是可以的. 比如:http://m.weather.com ...

  8. 浅谈Android项目----JSON解析(4种解析技术详解)

    json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...

  9. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

随机推荐

  1. JSP脚本连接数据库

    入门 简单的jsp文件 <%-- Created by IntelliJ IDEA. User: e550 Date: 2017/1/9 Time: 23:24 To change this t ...

  2. orm 通用方法——RunProc调用存储过程

    该方法暂不支持带返回值的存储过程,期待能人补充指点. 定义代码: /** * 描述:执行存储过程 * 作者:Tianqi * 日期:2014-09-16 * param:rs orm.RawSeter ...

  3. Linux软件万花筒

    650) this.width=650;" border="0" alt="" src="http://img1.51cto.com/att ...

  4. url传递中文的解决方案总结

    File文件控件,选中文件(图片,flash,视频)即立即预览显示 .Net刷新页面的几种方式 Attributes.Add用途与用法(C#) url传递中文的解决方案总结 byte[] bytes ...

  5. POJ 3641 Pseudoprime numbers (miller-rabin 素数判定)

    模板题,直接用 /********************* Template ************************/ #include <set> #include < ...

  6. tensorflow学习之路-----卷积神经网络个人总结

    卷积神经网络大总结(个人理解) 神经网络 1.概念:从功能他们模仿真实数据 2.结构:输入层.隐藏层.输出层.其中隐藏层要有的参数:权重.偏置.激励函数.过拟合 3.功能:能通过模仿,从而学到事件 其 ...

  7. JAVA 获取访问者IP

    * 获取访问者IP * * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效. * * 本方法先从Header中获取X-Real- ...

  8. C++11 volatile 类型

    volatile作用: 作为指令关键字,确保本条指令不会受到编译器的优化而省略,而且要求每次直接读值. 定义: volatile int nTest; volatile关键字是一种类型修饰符,用它声明 ...

  9. CSUOJ 1526 Beam me out!

    Beam me out! King Remark, first of his name, is a benign ruler and every wrongdoer gets a second cha ...

  10. 如何形象的解释 webhook 这个词

    就是一个 callback,只不过 callback 的操作是发送指定的 HTTP request 给一个指定的地址. callback 就是由甲传给乙,乙处理完之后通知甲传过来的方法或者请求甲方的 ...