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

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;

		}
	}
}


转载于:https://my.oschina.net/u/2541146/blog/625269

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值