文档章节

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
Java微信支付申请退款

一、申请退款内容 1.证书使用 申请退款是需要证书的。 证书名字:证书使用中,说明了Java使用的是第一种:pkcs12格式的apiclient_cert.p12。 下载证书:微信商户平台-->账户设置-->API安全-...

ioufev
2016/11/08
639
0
关于使用Gson解析多层的Json数据的问题

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

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

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

阿拉赛
2012/06/26
0
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
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
6
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
3
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
2
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
0
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部