牛骨文教育服务平台(让学习变的简单)

因为项目中要用到JSON解析,所以就学习了一下。有关于安卓JSON的教程网上有很多,来来去去都是这几个类的介绍。其实这一篇文章甚至也不能算是一篇学习心得,只能理解为一份备忘录。

下面是我要解析的JSON格式:

[{"file_id": "13", "filename": "grub2u6559u7a0b.pdf"}, {"file_id": "14", "filename": "demo.pdf"}]

这里面要用JSONArray来存储数组,然后用JSONObject获得里面的每一个键值对。
因为是随便写写,所以不免很多纰漏,listview的优化也没写。代码纯当笑话。

package com.example.getpdflist;

import java.io.InputStream;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

/**
 * 该类从服务器获取PDF文件名称和ID关系,获取方式:JSON
 * 
 * @author USER
 * 
 */
public class MainActivity extends Activity {
	// 网页传递JSON信息路径
	private final String JSON_PATH = "http://sysucs.org:8080/list";
	// 获得的JSON字符串内容
	private StringBuilder str;
	// 从JSON获取的名字与ID对应关系
	private ArrayList<Pair> jsonContent;
	private ListView lv;

	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			showListView();
		};
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = (ListView) findViewById(R.id.lv);
		jsonContent = new ArrayList<Pair>();
		str = new StringBuilder();
		new Thread(new getPdfThread()).start();

	}

	/**
	 * 该函数将stringBuilder转化为map对应关系
	 */
	private void handleJson() {
		try {
			JSONArray jsonArray = new JSONArray(str.toString());

			for (int i = 0; i < jsonArray.length(); i++) {
				JSONObject jsonObject = jsonArray.getJSONObject(i);
				String name = jsonObject.getString("filename");
				int id = jsonObject.getInt("file_id");
				Pair pair = new Pair(name, id);
				jsonContent.add(pair);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 为list设置内容
	private void showListView() {
		lv.setAdapter(new myAdapter());
	}

	private class myAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return jsonContent.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			Pair pair = jsonContent.get(position);
			System.out.println(pair.id + " " + pair.name);

			convertView = View.inflate(MainActivity.this, R.layout.item, null);
			TextView name = (TextView) convertView.findViewById(R.id.file_name);
			TextView id = (TextView) convertView.findViewById(R.id.file_id);
			name.setText(pair.name);
			id.setText(String.valueOf(pair.id));
			return convertView;
		}
	}

	/**
	 * 存储name id对的类
	 * 
	 * @author Hehyu
	 * 
	 */
	private class Pair {
		public String name;
		public int id;

		public Pair(String name, int id) {
			this.name = name;
			this.id = id;
		}
	}

	public class getPdfThread implements Runnable {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			HttpClient httpClient = new DefaultHttpClient();
			HttpGet httpGet = new HttpGet(JSON_PATH);
			try {
				HttpResponse httpResponse = httpClient.execute(httpGet);
				HttpEntity httpEntity = httpResponse.getEntity();
				InputStream is = httpEntity.getContent();
				byte[] buffer = new byte[1024];
				int len = 0;
				while ((len = is.read(buffer)) != 0) {
					String t = new String(buffer, 0, len);
					str.append(t);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			// 获取JSON对应关系
			handleJson();
			Message msg = Message.obtain();
			handler.sendMessage(msg);
		}
	}
}