文档章节

Handler配合数据下载,网上下载并解析JSON的例子(18)

f
 flyqilong
发布于 2016/02/27 21:26
字数 435
阅读 19
收藏 0
public class MainActivity extends Activity {
	private ListView listview;
	private ProgressDialog dialog;
	private String url = "http://m2.qiushibaike.com/article/list/suggest?page=1";
	Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 0:
				dialog.show();
				break;
			case 1:
				List<Map<String, Object>> list=(List<Map<String, Object>>) msg.obj;
				listview.setAdapter(new MyBaseAdapter(list));
				break;
			case 2:
				dialog.dismiss();
				break;
			}
		};
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listview = (ListView) this.findViewById(R.id.newslistView);
		dialog = new ProgressDialog(this);
		dialog.setIcon(R.drawable.ic_launcher);
		dialog.setTitle("提示: ");
		dialog.setMessage("正在下载!..o..!");
		new Thread(new Runnable() {

			@Override
			public void run() {
				handler.sendEmptyMessage(0);// 显示对话框
				String json = loadUrlJson(url);
				List<Map<String, Object>> list = parseJOSN(json);
				Message message = Message.obtain();
				message.what = 1;
				message.obj = list;
				handler.sendMessage(message);
				handler.sendEmptyMessage(2);// 关闭对话框

			}

		}).start();
	}

	// 下载字符串
	public String loadUrlJson(String url) {
		try {
			HttpClient client = new DefaultHttpClient();
			HttpGet get = new HttpGet(url);
			HttpResponse response = client.execute(get);
			if (response.getStatusLine().getStatusCode() == 200) {
				return EntityUtils.toString(response.getEntity(), "UTF-8");

			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}

	// JSON解析
	public List<Map<String, Object>> parseJOSN(String json) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		try {
			JSONObject jsonObject = new JSONObject(json);
			JSONArray jsonarray = jsonObject.getJSONArray("items");
			for (int i = 0; i < jsonarray.length(); i++) {
				Map<String, Object> itemMap = new HashMap<String, Object>();
				JSONObject jsonItems = jsonarray.getJSONObject(i);
				itemMap.put("image", jsonItems.getString("image"));
				itemMap.put("content", jsonItems.getString("content"));
				itemMap.put("comments_count",
						jsonItems.getString("comments_count"));
				JSONObject loginObj = jsonItems.getJSONObject("user");
				if(loginObj!=null){
					itemMap.put("login", loginObj.getString("login"));		
				}else{
					itemMap.put("login", "");	
				}

				list.add(itemMap);

			}

		} catch (JSONException e) {
			e.printStackTrace();
		}

		return list;
	}

	class MyBaseAdapter extends BaseAdapter {
		private List<Map<String, Object>> list;

		public MyBaseAdapter(List<Map<String, Object>> list) {
			this.list = list;
		}

		@Override
		public int getCount() {
			return this.list.size();
		}

		@Override
		public Object getItem(int position) {
			return this.list.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if (convertView == null) {
				holder = new ViewHolder();
				convertView = getLayoutInflater().inflate(
						R.layout.item_listview_main, null);
				ImageView imageView_cover = (ImageView) convertView
						.findViewById(R.id.imageView_cover);
				TextView text_login = (TextView) convertView
						.findViewById(R.id.text_login);
				TextView text_content = (TextView) convertView
						.findViewById(R.id.text_content);
				TextView text_commentscount = (TextView) convertView
						.findViewById(R.id.text_commentscount);
				holder.imageView_cover = imageView_cover;
				holder.text_login = text_login;
				holder.text_content = text_content;
				holder.text_commentscount = text_commentscount;
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			holder.imageView_cover.setImageResource(R.drawable.ic_launcher);
			holder.text_login.setText(this.list.get(position).get("login")
					.toString());
			holder.text_content.setText(this.list.get(position).get("content")
					.toString());
			holder.text_commentscount.setText(this.list.get(position)
					.get("comments_count").toString());
			return convertView;
		}

		class ViewHolder {
			private ImageView imageView_cover;
			private TextView text_login;
			private TextView text_content;
			private TextView text_commentscount;

		}
	}
}


© 著作权归作者所有

f
粉丝 3
博文 93
码字总数 53900
作品 0
Android工程师
私信 提问
[工具安装使用] [okHttp] okHttp client测试用例

说明: 之前此工程是用于测试webView的,所以工程名不是叫okHttpClient. Server之前文章已经有提到如何搭建了,见 Windows上Apache服务器的下载和安装 流程是从apache server读取一个文件jso...

kris_fei
2018/05/11
0
0
关于使用Gson解析多层的Json数据的问题

请问各位Android和Java方面的大佬,这种好多层的json数据应如何创建Bean类并解析,小弟只解析成功一层的,可这么多层的试了一晚上Android studio还是提示解析失败。 小弟是用OKHTTP框架配合G...

lsnnic
2018/11/14
493
4
ASP.NET如何使用JSON

关于json,有一个官网:http://www.json.org 上面介绍了每种语言生成json格式的类库,我们只要把他们下载解压之后调用他们其中的组件即可,在.net中我用的是Newtonsoft.Json.dll这个组件,这...

阿拉赛
2012/06/26
4.3K
2
原 ASP.NET如何使用JSON

发表于2年前(2012-06-26 11:28) 阅读(2597) | 评论(2) 4人收藏此文章, 我要收藏 赞0 ASP.NET JSON Newtonsoft.Json.dll 关于json,有一个官网:http://www.json.org 上面介绍了每种语言生...

波利beryl
2014/11/10
17
0
go提交json、获取json、解析json

猜你喜欢 Go语言的Json管理模式 golang json string remove field [笔记] Golang JSON go: json解析库go-simplejson使用 Golang 1.6: 数据库NULL值遇到JSON和模板(Template) beego下ie提示下...

d_watson
2016/05/24
43
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 调查人员问狗 那你在做什么啊?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《Let It Be》- John Denver 《Let It Be》- John Denver 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :每天看一遍,...

小小编辑
今天
6
0
高效程序员的45个习惯总结版-文末脑图

1 做事 一个重大的错误应该被当做一次学习而不是指责他人的机会,团队成员一起工作,应该互相帮助,而不是互相指责 2 欲速则不达 不要为了修复问题而去修复,要投入时间和精力保持代码整洁 ...

阿提说说
今天
18
0
带南海九段线分位数地图可视化(R语言版)

今天带来一篇承诺虾神的可视化博客。内容是使用R语言进行带南海九段线分位数地图可视化。虾神的原博文地址如下(Python版)。 Python实现带南海九段线分位数地图完整可视化版本(附代码及数据...

胖胖雕
今天
12
0
Nginx 的进程结构,你明白吗?

Nginx 进程结构 这篇文章我们来看下 Nginx 的进程结构,Nginx 其实有两种进程结构: 单进程结构 多进程结构 单进程结构实际上不适用于生产环境,只适合我们做开发调试使用。因为在生产环境中...

武培轩
今天
20
0
蓝鲸平台部署

环境 系统:Centos7 依赖包:java8 主机: 10.0.1.150 域名:paas.ops.net;cmdb.ops.net;job.ops.net 生成SSH key ssh-keygen -t rsa -P '' 生成证书 https://bk.tencent.com/download_ssl/......

以谁为师
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部