手順2、手順1の通信で取得した記事データをループ処理の中で1記事ごとに取り出す
package jp.example.hello;
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
public class HogehogeActivity extends Activity {
private static final String LogTag = “HogehogeLog”;
private ProgressDialog dialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hogehoge);
// jsonを取得して解析する
LoadTask();
}
private String makeApiUrl(){
return “http://akamako.com/blogger/sample.php”;
}
private void LoadTask(){
// ProgressDialogを作成
dialog = new ProgressDialog(this);
dialog.setMessage(“Connect to Server.”);
dialog.setCancelable(true);
dialog.show();
try{
String apiUrl = makeApiUrl();
// コンソールログに出力
Log.d(LogTag+” apiUrl”,apiUrl);
HttpGet get = new HttpGet(apiUrl);
HttpClient DefaultHttpClient = new DefaultHttpClient();
HttpResponse response = DefaultHttpClient.execute(get);
// ステータスコード
int status = response.getStatusLine().getStatusCode();
Log.d(LogTag+” status”,String.valueOf(status));
if (status != HttpStatus.SC_OK) {
throw new Exception(“Error!”);
}
// 結果を取得
String source = EntityUtils.toString(response.getEntity());
Log.d(LogTag+” source”,source);
// JSONObject という型があるんだって
JSONObject json = new JSONObject(source);
// 記事データ
JSONArray items = json.getJSONArray(“items”);
// 記事の数
String count = json.getString(“count”);
if(count.equals(“0”) == true){
// 記事データが無かったお
}
// items の中身の数
int maxI = items.length();
for(int i = 0; i < maxI; i++) {
// 1つ取り出す
JSONObject item = items.getJSONObject(i);
// 表示項目を初期化
String itemId = “”;
String itemTitle=“”;
String itemDetail=“”;
String itemIconUrl=“”;
String itemImageUrl=“”;
if(item.has(“id”)) {
itemId = item.getString(“id”);
}
if(item.has(“title”)) {
itemTitle = item.getString(“title”);
}
if(item.has(“detail”)) {
itemDetail = item.getString(“detail”);
}
if(item.has(“icon”)) {
itemIconUrl = item.getString(“icon”);
}
if(item.has(“image”)) {
itemImageUrl = item.getString(“image”);
}
Log.d(LogTag + ” itemId”, itemId);
Log.d(LogTag + ” itemTitle”, itemTitle);
Log.d(LogTag + ” itemDetail”, itemDetail);
Log.d(LogTag + ” itemIconUrl”, itemIconUrl);
Log.d(LogTag + ” itemImageUrl”, itemImageUrl);
}
DefaultHttpClient.getConnectionManager().shutdown();
}
catch (ClientProtocolException e){
Log.d(LogTag + ” ClientProtocolException”, e.getMessage());
}
catch (IOException e){
Log.d(LogTag + ” IOException”, e.getMessage());
}
catch(Exception e){
Log.d(LogTag + ” Exception”, e.getMessage());
}
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
}
・動作確認
エミュレータを起動してHogehogeActivityに記述した Log.d(LogTag+” apiUrl”,apiUrl); がLogCat内に表示されるのを確認してください。
===========================
08-16 20:56:15.438: D/HogehogeLog apiUrl(732): http://akamako.com/blogger/sample.php
08-16 20:56:15.638: D/HogehogeLog status(732): 200
08-16 20:56:15.648: D/HogehogeLog source(732): {“count”:4,”items”:[{“id”:”1234″,”title”:”\u30bf\u30a4\u30c8\u30eb\u3068\u304b1234″,”detail”:”\u8a73\u7d30\u5185\u5bb9\u3068\u304b\u8a73\u7d30\u5185\u5bb9\u3068\u304b\u8a73\u7d30\u5185\u5bb9\u3068\u304b1234″,”icon”:”http:\/\/akamako.com\/blogger\/pict\/1.jpg”,”image”:”http:\/\/akamako.com\/blogger\/pict\/2.jpg”},{“id”:”1235″,”title”:”\u30bf\u30a4\u30c8\u30eb\u3068\u304b1235″,”detail”:”\u8a73\u7d30\u5185\u5bb9\u3068\u304b\u8a73\u7d30\u5185\u5bb9\u3068\u304b\u8a73\u7d30\u5185\u5bb9\u3068\u304b1235″,”icon”:”http:\/\/akamako.com\/blogger\/pict\/3.jpg”,”image”:”http:\/\/akamako.com\/blogger\/pict\/4.jpg”},{“id”:”1236″,”title”:”\u30bf\u30a4\u30c8\u30eb\u3068\u304b1236″,”detail”:”\u8a73\u7d30\u5185\u5bb9\u3068\u304b\u8a73\u7d30\u5185\u5bb9\u3068\u304b\u8a73\u7d30\u5185\u5bb9\u3068\u304b1236″,”icon”:”http:\/\/akamako.com\/blogger\/pict\/5.jpg”,”image”:”http:\/\/akamako.com\/blogger\/pict\/6.jpg”},{“id”:”1237″,”title”:”\u30bf\u30a4\u30c8\u30eb\u3068\u304b1237″,”detail”:”\u8a73\u7d30\u5185\u5bb9\u3068\u304b\u8a73\u7d30\u5185\u5bb9\u3068\u304b\u8a73\u7d30\u5185\u5bb9\u3068\u304b1237″,”icon”:”http:\/\/akamako.com\/blogger\/pict\/7.jpg”,”image”:”http:\/\/akamako.com\/blogger\/pict\/8.png”}]}
08-16 20:56:15.678: D/HogehogeLog itemId(732): 1234
08-16 20:56:15.678: D/HogehogeLog itemTitle(732): タイトルとか1234
08-16 20:56:15.678: D/HogehogeLog itemDetail(732): 詳細内容とか詳細内容とか詳細内容とか1234
08-16 20:56:15.678: D/HogehogeLog itemIconUrl(732): http://akamako.com/blogger/pict/1.jpg
08-16 20:56:15.678: D/HogehogeLog itemImageUrl(732): http://akamako.com/blogger/pict/2.jpg
08-16 20:56:15.688: D/HogehogeLog itemId(732): 1235
08-16 20:56:15.688: D/HogehogeLog itemTitle(732): タイトルとか1235
08-16 20:56:15.688: D/HogehogeLog itemDetail(732): 詳細内容とか詳細内容とか詳細内容とか1235
08-16 20:56:15.688: D/HogehogeLog itemIconUrl(732): http://akamako.com/blogger/pict/3.jpg
08-16 20:56:15.698: D/HogehogeLog itemImageUrl(732): http://akamako.com/blogger/pict/4.jpg
08-16 20:56:15.698: D/HogehogeLog itemId(732): 1236
08-16 20:56:15.698: D/HogehogeLog itemTitle(732): タイトルとか1236
08-16 20:56:15.698: D/HogehogeLog itemDetail(732): 詳細内容とか詳細内容とか詳細内容とか1236
08-16 20:56:15.698: D/HogehogeLog itemIconUrl(732): http://akamako.com/blogger/pict/5.jpg
08-16 20:56:15.698: D/HogehogeLog itemImageUrl(732): http://akamako.com/blogger/pict/6.jpg
08-16 20:56:15.698: D/HogehogeLog itemId(732): 1237
08-16 20:56:15.708: D/HogehogeLog itemTitle(732): タイトルとか1237
08-16 20:56:15.708: D/HogehogeLog itemDetail(732): 詳細内容とか詳細内容とか詳細内容とか1237
08-16 20:56:15.708: D/HogehogeLog itemIconUrl(732): http://akamako.com/blogger/pict/7.jpg
08-16 20:56:15.708: D/HogehogeLog itemImageUrl(732): http://akamako.com/blogger/pict/8.png
===========================
おぉーーーー!
WEBサーバーからjsonデータを取得してjava内の変数(オブジェクト)に代入できたってことじゃね!?
これらの表示データをAndroidの画面に出力(Viewにワタス?)できればよさそうだな。
コメントを残す