因為項目中要用到JSON解析,所以就學習了一下。有關于安卓JSON的教程網上有很多,來來去去都是這幾個類的介紹。其實這一篇文章甚至也不能算是一篇學習心得,只能理解為一份備忘錄。
下面是我要解析的JSON格式:
~~~
[{"file_id": "13", "filename": "grub2\u6559\u7a0b.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);
}
}
}
~~~
- 前言
- 安卓ListView一個簡單代碼的注釋和探討
- 安卓wifi熱點編程代碼的若干注釋
- 安卓距離傳感器編程
- 簡單的ScrollView
- 簡單的ListView
- 簡單的ArrayAdapter
- AsyncTask的初步學習
- AsyncTask再度學習
- Handler初步學習
- 開啟系統Activity
- 隱式調用Activity
- Activity的生命周期
- startActivityForResult的初步學習
- 多點觸控拉伸圖片
- LruCache圖片緩存技術
- SQLiteOpenHelper數據庫操作
- 短信攔截器
- 簡單的Notification
- ListView優化以及checkbox狀態問題
- 安卓多線程下載
- 安卓JSON解析初步探討
- 選項卡樣式的fragment
- DrawerLayout實現簡單的側滑功能
- 安卓軟引用解決圖片OOM問題
- 安卓隱式Intent啟動Activity和BroadcastReceiver若干注意點
- Dialog學習筆記
- ActionBar使用