android通用JSON解析
- 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;
 - 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;
 - import java.net.HttpURLConnection;
 - import java.net.URL;
 - import java.nio.ByteBuffer;
 - import java.nio.channels.Channels;
 - import java.nio.channels.ReadableByteChannel;
 - import java.util.ArrayList;
 - import java.util.HashMap;
 - import java.util.Iterator;
 - import java.util.List;
 - import java.util.Map;
 - import java.util.concurrent.Callable;
 - import java.util.concurrent.ExecutorService;
 - import java.util.concurrent.Executors;
 - import java.util.concurrent.Future;
 - import org.json.JSONArray;
 - import org.json.JSONObject;
 - import android.app.Activity;
 - import android.os.Bundle;
 - import android.util.Log;
 - import android.view.LayoutInflater;
 - import android.view.View;
 - import android.view.ViewGroup;
 - import android.widget.BaseAdapter;
 - import android.widget.ListView;
 - import android.widget.TextView;
 - import cn.com.pcgroup.android.browser.R;
 - public class Information extends Activity {
 - private static final String baseUrl = "http://192.168.199.45/1.txt";
 - private static final String TAG = Information.class.getSimpleName();
 - private static LayoutInflater mInflater;
 - private static String json;
 - private Map<String, String> infoMap = new HashMap<String, String>();
 - private static Map<Index, String> itemMap = new HashMap<Index, String>();
 - @Override
 - protected void onCreate(Bundle savedInstanceState) {
 - super.onCreate(savedInstanceState);
 - setContentView(R.layout.online_product_information);
 - ListView list = (ListView) findViewById(R.id.list);
 - mInflater = getWindow().getLayoutInflater();
 - try {
 - json = downloadJSON().get();
 - Log.v(TAG, json);
 - JSONObject jsonObject = new JSONObject(json);
 - handleJson(jsonObject, infoMap);
 - Index i = new Index();
 - i.setKey("image");
 - i.setPos(1);
 - String result = itemMap.get(i);
 - Log.v(TAG, "result = " + result);
 - Log.v(TAG, "productId = " + infoMap.get("productId"));
 - Log.v(TAG, "itemCount = " + itemCount);
 - InforAdapter adapter = new InforAdapter(itemCount);
 - list.setAdapter(adapter);
 - } catch (Exception e) {
 - throw new RuntimeException(e);
 - }
 - }
 - private void handleJson(JSONObject jsonObject, Map<String, String> infoMap) {
 - if (jsonObject == null || infoMap == null)
 - return;
 - @SuppressWarnings("unchecked")
 - Iterator<String> it = jsonObject.keys();
 - while (it.hasNext()) {
 - String key = it.next();
 - JSONArray array = jsonObject.optJSONArray(key);
 - // 假如只是JSONObject
 - if (array == null)
 - infoMap.put(key, jsonObject.optString(key));
 - // 是JSONArray,则递归处理
 - else {
 - handleJsonArray(array, itemMap);
 - }
 - }
 - }
 - private static class Index {
 - private int pos = 0;
 - private String key = new String();
 - public Index() {
 - }
 - public Index(int pos, String key) {
 - this.pos = pos;
 - this.key = key;
 - }
 - @Override
 - public int hashCode() {
 - final int prime = 31;
 - int result = 1;
 - result = prime * result + ((key == null) ? 0 : key.hashCode());
 - result = prime * result + pos;
 - return result;
 - }
 - @Override
 - public boolean equals(Object obj) {
 - if (obj == this)
 - return true;
 - if (obj instanceof Index)
 - return ((Index) obj).pos == pos
 - && (((Index) obj).key).equals(key);
 - return false;
 - }
 - public int getPos() {
 - return pos;
 - }
 - public void setPos(int pos) {
 - this.pos = pos;
 - }
 - public String getKey() {
 - return key;
 - }
 - public void setKey(String key) {
 - this.key = key;
 - }
 - }
 - private int itemCount = 0;
 - private int handleJsonArray(JSONArray array, Map<Index, String> map) {
 - if (array == null)
 - return itemCount;
 - int len = array.length();
 - itemCount = len;
 - for (int i = 0; i < len; i++) {
 - JSONObject obj = (JSONObject) array.opt(i);
 - @SuppressWarnings("unchecked")
 - Iterator<String> it = obj.keys();
 - while (it.hasNext()) {
 - String key = it.next();
 - JSONArray a = obj.optJSONArray(key);
 - if (a != null)
 - handleJsonArray(a, itemMap);
 - else {
 - Index index = new Index(i, key);
 - itemMap.put(index, obj.optString(key));
 - }
 - }
 - }
 - return itemCount;
 - }
 - private static class InforAdapter extends BaseAdapter {
 - private int count; // 有几条数据
 - String[] sa = { "id", "title", "image", "channel" };
 - public InforAdapter(int count) {
 - this.count = count;
 - }
 - @Override
 - public int getCount() {
 - return count;
 - }
 - @Override
 - public Object getItem(int position) {
 - return position;
 - }
 - @Override
 - public long getItemId(int position) {
 - return position;
 - }
 - @Override
 - public View getView(int position, View convertView, ViewGroup parent) {
 - if (convertView == null) {
 - convertView = mInflater.inflate(R.layout.information_layout,
 - null);
 - }
 - TextView t = (TextView) convertView.findViewById(R.id.text);
 - t.setTextSize(20);
 - Index i = new Index(position, "title");
 - t.setText(itemMap.get(i));
 - return convertView;
 - }
 - }
 - @SuppressWarnings({ "finally", "unused" })
 - private String getStringFromServer(final String url){
 - ReadableByteChannel channel = null;
 - StringBuilder sb = null;
 - try {
 - URL u = new URL(url);
 - HttpURLConnection conn = (HttpURLConnection) u.openConnection();
 - channel = Channels.newChannel(conn.getInputStream());
 - ByteBuffer buffer = ByteBuffer.allocate(1024);
 - sb = new StringBuilder();
 - while(channel.read(buffer) != -1){
 - buffer.flip();
 - while(buffer.hasRemaining())
 - sb.append((char)buffer.get());
 - buffer.clear();
 - }
 - } catch (Exception e) {
 - throw new RuntimeException(e);
 - }finally{
 - try {
 - channel.close();
 - } catch (IOException e) {
 - e.printStackTrace();
 - }finally{
 - return sb.toString();
 - }
 - }
 - }
 - private Future<String> downloadJSON(){
 - ExecutorService exec = Executors.newCachedThreadPool();
 - class DownLoadTask implements Callable<String>{
 - @SuppressWarnings("static-access")
 - @Override
 - public String call() {
 - json = OnlineApiService.getInstance(Information.this).getJSONString(baseUrl);
 - return json;
 - }
 - }
 - Future<String> future = exec.submit(new DownLoadTask());
 - exec.shutdown();
 - return future;
 - }
 - }
 
android通用JSON解析的更多相关文章
- 一个.NET通用JSON解析/构建类的实现(c#)转
		
转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...
 - 一个.NET通用JSON解析/构建类的实…
		
一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...
 - C#字符串数组排序    C#排序算法大全  C#字符串比较方法  一个.NET通用JSON解析/构建类的实现(c#)   C#处理Json文件  asp.net使用Jquery+iframe传值问题
		
C#字符串数组排序 //排序只带字符的数组,不带数字的 private string[] aa ={ "a ", "c ", "b & ...
 - Android 之json解析
		
JSON(JavaScript Object Notation) 定义:字符串 键值对 解析方法有JSON,谷歌GSON,阿里巴巴FastJSON(推荐) 一种轻量级的数据交换格式,具有良好的可读和便 ...
 - Android 中Json解析的几种框架(Gson、Jackson、FastJson、LoganSquare)使用与对比
		
介绍 移动互联网产品与服务器端通信的数据格式,如果没有特殊的需求的话,一般选择使用JSON格式,Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高 ...
 - Android之JSON解析
		
做个Android网络编程的同学一定对于JSON解析一点都不陌生,因为现在我们通过手机向服务器请求资源,服务器给我们返回的数据资源一般都是以JSON格式返回,当然还有一些通过XML格式返回,相对JSO ...
 - Android项目--Json解析
		
在过去的一段时间里,我希望做一个天气的应用,但是由于老版的天气接口已经不能用了.只能更新到2014年3月4日. 不过有些东西,哪来学习一下,也是可以的. 比如:http://m.weather.com ...
 - 浅谈Android项目----JSON解析(4种解析技术详解)
		
json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...
 - Android okHttp网络请求之Json解析
		
前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...
 
随机推荐
- mysql二进制日志文件出错导致mysql服务无法启动
			
今天打开phpmyadmin发现连不上mysql数据库,重新启动mysql启动不起来,查看日志发现例如以下错误 <span style="font-family:SimSun;font ...
 - POJ 3271  BFS (大坑)
			
被某人拉进了坑 完完全全被坑一天的题-- 题意: 正解思路: 先把每一个点搜一遍 预处理出它能在一步之内到的所有点 并连边 然后用一个类似DP的东西把方案数加起来就搞定了 (其实 也不是很难) 但是 ...
 - javaScript学习之正则表达式初探
			
正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符 ...
 - BFC 和 haslayout
			
在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很 ...
 - HTTP 413报错
			
在php中通过flash上传文件到服务器端时报413错误,原来一直以为是php.ini配置的问题,但是检查了php.ini的配置以后,发现不是php.ini的问题,最后是通过Http Analyzer ...
 - EditPlus,UltraEdit等编辑器列选择的方法
			
在使用富文本编辑器的时候,通常模式是行选择状态,由于今天想使用EditPlus列选择状态, 于是通过在网上收集的资料,总结出相关富文本编辑器的列选择的方法. EditPlus 1)菜单:编辑 -&g ...
 - BUFFER OVERFLOW 10 Vulnerability & Exploit Example
			
SRC= http://www.tenouk.com/Bufferoverflowc/Bufferoverflow6.html THE VULNERABLE AND THE EXPLOIT W ...
 - [Zabbix] 怎样实现邮件报警通知以及免费短信报警通知
			
前提条件: (1) zabbixserver端已经安装成功而且执行. (2) zabbixclient已经成功建立而且执行. 1 下载而且安装msmtp软件 Wget http://sourcefo ...
 - cocos2d-x 3.2  之 2048 —— 第一篇
			
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
 - 第二天,导出文件sql,查询,视图view,聚合函数,反模式,字符串处理函数
			
//把数据库导出到脚本文件mysqldump -uroot -p1234 --databases abc > d:/a/abc.sql CREATE TABLE stud( id INT PRI ...