綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[資料] Android利用Json來進行網路數據傳輸

[複製連結] 查看: 1936|回覆: 2|好評: 0
跳轉到指定樓層
樓主
暗桌之光 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2011-11-3 14:22

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
          目前有很多地方得用到網路數據傳輸與解析,這裡採用的是Json方式,它與傳統的XML解析方式比起來,有自己的一些優點,首先,它是比XML更輕量級,再一個,寫一個XML文件是個煩人的事兒,而Json則相對輕鬆些。

          Android平台有Jsong相關的類來進行Json數據解析,悲劇的是,它們是Android SDK3.0以後才能用的。不過在Google網站: http://code.google.com/p/google-gson/裡有一個名為Gson的類庫,可以用它來解析Json數據,並且,Adroid 3.0平台裡其實也就是把這一部分直接整合進Android裡了。我們要解析Json數據,直接去網站上下載個jar包,導入到工程裡,就可以解析Json數據了。

下面有個例子,很清晰的解釋了這種工作方式:

先看看兩個封裝的類:
HttpUtils.java:
  1. public class HttpUtils {   //從服務器端下載到Json數據,也就是個字符串
  2.     public static String getData(String url) throws Exception {
  3.         StringBuilder sb = new StringBuilder();
  4.         HttpClient httpClient = new DefaultHttpClient();
  5.         HttpGet httpGet = new HttpGet(url);
  6.         HttpResponse httpResponse = httpClient.execute(httpGet);
  7.         HttpEntity httpEntity = httpResponse.getEntity();
  8.         if (httpEntity != null) {
  9.             InputStream instream = httpEntity.getContent();
  10.             BufferedReader reader = new BufferedReader(new InputStreamReader(
  11.                     instream));
  12.             String line = null;
  13.             while ((line = reader.readLine()) != null) {
  14.                 sb.append(line);
  15.             }
  16.             return sb.toString();
  17.         }
  18.         return null;
  19.     }
複製代碼
JsonUtils.java:
  1. public class JsonUtils {
  2.     public static List<Student> parseStudentFromJson(String data) {
  3.         Type listType = new TypeToken<LinkedList<Student>>() {
  4.         }.getType();
  5.         Gson gson = new Gson();
  6.         LinkedList<Student> list = gson.fromJson(data, listType);
  7.         return list;
  8.     }
  9. }
複製代碼
裡面的Student是一個JavaBean對像:
  1. public class Student {
  2.     private String name;
  3.     private int age;
  4.     private String id;

  5.     public Student() {
  6.         super();
  7.     }

  8.     public Student(String name, int age, String id) {
  9.         super();
  10.         this.name = name;
  11.         this.age = age;
  12.         this.id = id;
  13.     }

  14.     public String getName() {
  15.         return name;
  16.     }

  17.     public void setName(String name) {
  18.         this.name = name;
  19.     }

  20.     public int getAge() {
  21.         return age;
  22.     }

  23.     public void setAge(int age) {
  24.         this.age = age;
  25.     }

  26.     public String getId() {
  27.         return id;
  28.     }

  29.     public void setId(String id) {
  30.         this.id = id;
  31.     }

  32. }
複製代碼
再看看我們要解析網路數據的Activity:
  1. public class MainActivity extends Activity {
  2.     private TextView textView;
  3.     private List<Student> list;

  4.     /** Called when the activity is first created. */
  5.     @Override
  6.     public void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.         setContentView(R.layout.main);
  9.         textView = (TextView) findViewById(R.id.textView);
  10.         String data = null;
  11.         try {
  12.             data = HttpUtils
  13.                     .getData("http://10.16.12.165:8080/JsonTest/JsonTestServlet");
  14.         } catch (Exception e) {
  15.             e.printStackTrace();
  16.         }
  17.         String result = "";
  18.         list = JsonUtils.parseStudentFromJson(data);
  19.         for (Student s : list) {
  20.             result += "name: " + s.getName() + "   " + "age: " + s.getAge()
  21.                     + "   " + "id: " + s.getId() + "\n";
  22.         }
  23.         textView.setText(result);
  24.     }
  25. }
複製代碼
這樣就可以獲取網路數據並加以解析利用了
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 1碎鑽 +2 幫助 +2 技術 +1 收起 理由
ploglin + 2 + 2 + 1 讚一個!

查看全部評分

收藏收藏1 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
ploglin | 收聽TA | 只看該作者
發表於 2011-11-4 09:10
json 是很方便的格式,或許是我接觸 oo 還不夠深,當我在使用 json 的時候,因為通常會需要搭配 ListView 或 GridView 之類的,因此在需要使用到 SimpleAdapter 的類。

在處理上會利用 JSONObject 以及 JSONArray 2種方式,將資料轉換成 ArrayList<HashMap<String, Object>> 的格式,傳入 SimpleAdapter 來實作資料的呈現。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
louis5727008 | 收聽TA | 只看該作者
發表於 2012-2-6 14:29
怎麼沒有早點發現這個論壇呢?有進度了~感謝大大~
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則