2011年1月15日土曜日

Android:JSON表示クライアントアプリ

こないだGoogle App Engine + slim3 + JSONICで作ったサンプルをAndroidで表示するアプリを作ってみたのでメモ。

とりあえず実現したい事は、JSONをHTTPのgetで受け取ってListViewで表示までを目標に。
で、下記のように実装。
(URIベタ書きですが...、とりあえず動かしたいので。)

  1. import java.io.IOException;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import org.apache.http.HttpEntity;  
  5. import org.apache.http.HttpResponse;  
  6. import org.apache.http.HttpStatus;  
  7. import org.apache.http.ParseException;  
  8. import org.apache.http.client.ClientProtocolException;  
  9. import org.apache.http.client.methods.HttpGet;  
  10. import org.apache.http.impl.client.DefaultHttpClient;  
  11. import org.apache.http.params.HttpConnectionParams;  
  12. import org.apache.http.params.HttpParams;  
  13. import org.apache.http.util.EntityUtils;  
  14. import org.json.JSONArray;  
  15. import org.json.JSONException;  
  16. import org.json.JSONObject;  
  17. import android.app.Activity;  
  18. import android.os.Bundle;  
  19. import android.widget.ArrayAdapter;  
  20. import android.widget.ListView;  
  21.   
  22. public class JsonListActivity extends Activity {  
  23.   
  24.  private String strUri = "http://1.latest.slim3demo001.appspot.com/AjaxTweet.json";  
  25.   
  26.  private String json = null;  
  27.   
  28.     /** Called when the activity is first created. */  
  29.     @Override  
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.main);  
  33.   
  34.         DefaultHttpClient httpClient = new DefaultHttpClient();  
  35.         HttpParams params = httpClient.getParams();  
  36.         HttpConnectionParams.setConnectionTimeout(params, 1000);  
  37.         HttpConnectionParams.setSoTimeout(params, 1000);  
  38.         HttpGet httpRequest = new HttpGet(strUri);  
  39.         HttpResponse httpResponse = null;  
  40.   
  41.         try {  
  42.    httpResponse = httpClient.execute(httpRequest);  
  43.   } catch (ClientProtocolException e) {  
  44.    e.printStackTrace();  
  45.   } catch (IOException e) {  
  46.    e.printStackTrace();  
  47.   }  
  48.   if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
  49.    HttpEntity httpEntity = httpResponse.getEntity();  
  50.   
  51.    try {  
  52.     json = EntityUtils.toString(httpEntity);  
  53.    } catch (ParseException e) {  
  54.     e.printStackTrace();  
  55.    } catch (IOException e) {  
  56.     e.printStackTrace();  
  57.    } finally {  
  58.     try {  
  59.      httpEntity.consumeContent();  
  60.     } catch (IOException e) {  
  61.      e.printStackTrace();  
  62.     }  
  63.    }  
  64.   }  
  65.   
  66.   httpClient.getConnectionManager().shutdown();  
  67.   ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1);  
  68.   
  69.   try {  
  70.    JSONArray jsonArray = new JSONArray(json);  
  71.    int cnt = jsonArray.length();  
  72.    List<jsonobject> jlist = new ArrayList<jsonobject>();  
  73.    for (int i = 0; i < cnt; i++) {  
  74.     jlist.add(jsonArray.getJSONObject(i));  
  75.    }  
  76.    for (JSONObject obj : jlist) {  
  77.     String item = obj.getString("content");  
  78.     adapter.add(item);  
  79.    }  
  80.   } catch (JSONException e) {  
  81.    e.printStackTrace();  
  82.   }  
  83.   ListView listView = (ListView)findViewById(R.id.jsonlistview);  
  84.   listView.setAdapter(adapter);  
  85.     }  
  86. }  
  87. </jsonobject></jsonobject></string></string>  
main.xmlは下記のように
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <ListView  
  8.      android:id="@+id/jsonlistview"  
  9.      android:layout_width="fill_parent"  
  10.      android:layout_height="wrap_content"/>  
  11. </LinearLayout>  
ネットにつなげるので、Manifestファイルにも"android.permission.INTERNET"を追加
  1. <uses-permission android:name="android.permission.INTERNET"/>  
一応無事に動きました。
参考サイト: Android で JSON を使おう ~ 前編~CommentsAdd Star Android で JSON を使おう ~ 後編 ~CommentsAdd Star

0 件のコメント:

コメントを投稿