文档章节

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

f
 flyqilong
发布于 2016/02/27 21:26
字数 435
阅读 18
收藏 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
05/11
0
0
JSON 下载和解析--ExerJSON

ExerJSON为网络异步下载并解析JSON数据。使用ASIHTTPRequest、SBJSON和SDWebImage库。

红薯
2014/09/29
1K
1
Java微信支付申请退款

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

ioufev
2016/11/08
639
0
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

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
49分钟前
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
2
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
3
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部