こないだGoogle App Engine + slim3 + JSONICで作ったサンプルをAndroidで表示するアプリを作ってみたのでメモ。
とりあえず実現したい事は、JSONをHTTPのgetで受け取ってListViewで表示までを目標に。
で、下記のように実装。
(URIベタ書きですが...、とりあえず動かしたいので。)
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.http.HttpEntity;
- import org.apache.http.HttpResponse;
- import org.apache.http.HttpStatus;
- import org.apache.http.ParseException;
- import org.apache.http.client.ClientProtocolException;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.params.HttpConnectionParams;
- import org.apache.http.params.HttpParams;
- import org.apache.http.util.EntityUtils;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
-
- public class JsonListActivity extends Activity {
-
- private String strUri = "http://1.latest.slim3demo001.appspot.com/AjaxTweet.json";
-
- private String json = null;
-
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- DefaultHttpClient httpClient = new DefaultHttpClient();
- HttpParams params = httpClient.getParams();
- HttpConnectionParams.setConnectionTimeout(params, 1000);
- HttpConnectionParams.setSoTimeout(params, 1000);
- HttpGet httpRequest = new HttpGet(strUri);
- HttpResponse httpResponse = null;
-
- try {
- httpResponse = httpClient.execute(httpRequest);
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
- HttpEntity httpEntity = httpResponse.getEntity();
-
- try {
- json = EntityUtils.toString(httpEntity);
- } catch (ParseException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- httpEntity.consumeContent();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- httpClient.getConnectionManager().shutdown();
- ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1);
-
- try {
- JSONArray jsonArray = new JSONArray(json);
- int cnt = jsonArray.length();
- List<jsonobject> jlist = new ArrayList<jsonobject>();
- for (int i = 0; i < cnt; i++) {
- jlist.add(jsonArray.getJSONObject(i));
- }
- for (JSONObject obj : jlist) {
- String item = obj.getString("content");
- adapter.add(item);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- ListView listView = (ListView)findViewById(R.id.jsonlistview);
- listView.setAdapter(adapter);
- }
- }
- </jsonobject></jsonobject></string></string>
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class JsonListActivity extends Activity {
private String strUri = "http://1.latest.slim3demo001.appspot.com/AjaxTweet.json";
private String json = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 1000);
HttpConnectionParams.setSoTimeout(params, 1000);
HttpGet httpRequest = new HttpGet(strUri);
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(httpRequest);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity httpEntity = httpResponse.getEntity();
try {
json = EntityUtils.toString(httpEntity);
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
httpEntity.consumeContent();
} catch (IOException e) {
e.printStackTrace();
}
}
}
httpClient.getConnectionManager().shutdown();
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
try {
JSONArray jsonArray = new JSONArray(json);
int cnt = jsonArray.length();
List jlist = new ArrayList();
for (int i = 0; i < cnt; i++) {
jlist.add(jsonArray.getJSONObject(i));
}
for (JSONObject obj : jlist) {
String item = obj.getString("content");
adapter.add(item);
}
} catch (JSONException e) {
e.printStackTrace();
}
ListView listView = (ListView)findViewById(R.id.jsonlistview);
listView.setAdapter(adapter);
}
}
main.xmlは下記のように
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <ListView
- android:id="@+id/jsonlistview"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"/>
- </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/jsonlistview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
ネットにつなげるので、Manifestファイルにも"android.permission.INTERNET"を追加
- <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET"/>
一応無事に動きました。
参考サイト:
Android で JSON を使おう ~ 前編~CommentsAdd Star
Android で JSON を使おう ~ 後編 ~CommentsAdd Star
0 件のコメント:
コメントを投稿