首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
移动开发
> 详细
android通用JSON解析
时间:
2016-04-13 18:35:34
阅读:
289
评论:
0
收藏:
0
[点我收藏+]
标签:
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解析
标签:
原文地址:http://www.cnblogs.com/tian830937/p/5387979.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
关闭苹果IOS app自动更新
2021-07-29
开发一个即时通讯App
2021-07-28
iOS 跳转App Store进行评分
2021-07-26
诺基亚短信生成!太好玩了
2021-07-26
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
2021-07-26
Android系统编程入门系列之界面Activity响应丝滑的传统动画
2021-07-26
uniapp h5,app两端复制文本
2021-07-22
uni-app滚动视图容器(scroll-view)之监听上拉事件
2021-07-21
新型横向移动工具原理分析、代码分析、优缺点以及检测方案
2021-07-19
Android系统编程入门系列之界面Activity交互响应
2021-07-19
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!