WEBサーバーから取得したJSONデータを複数表示 手順1

手順1、WEBサーバーからHTTP経由でjson形式の複数の記事データを取得する

・Hogehogeアクティビティを作る

起動するアクティビティを作るよ。
ファイル名は HogehogeActivity.java となるかとおもわれ。
置き場所は hello/src/jp.example.hello 配下です。
アクティビティとは http://example.jp/〇〇.php  の 〇〇.php にあたるものだ。多分。


package jp.example.hello;


import android.app.Activity;
import android.os.Bundle;
public class HogehogeActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hogehoge);
    }
}
おぉ短い。

・res/layout/hogehoge.xmlをつくる

アクティビティで setContentView(R.layout.hogehoge); とすると hogehoge.xml を作らないとエラーになります。
エミュレーターが「アプリが予期せず停止しました。やり直してください。」等と言って起動してくれません。
こういう「んん?」っていうエラーでツマヅキまくるんだよね。


<?xml version=“1.0” encoding=“utf-8”?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android” android:id = “@+id/mainLayout”
android:orientation=“vertical”
android:layout_height=“fill_parent”
android:layout_width=“fill_parent”
>
<ListView
    android:id=“@+id/list”
    android:layout_width=“fill_parent”
    android:layout_height=“wrap_content”
    android:fadeScrollbars=“false”/>
</LinearLayout>

・AndroidManifest.xmlを修正

まず、インターネットに接続しますよーというマニフェストをかかげるべく、AndroidManifest.xml に次の1行を追記します。


      <uses-permission android:name=“android.permission.INTERNET”/>



 次に、HogehogeActivity をアクティビティとして使いますよーというマニフェストを宣言すべく、AndroidManifest.xml に次の1行を追記します。


        <activity android:name=“HogehogeActivity”></activity>

参考

・エミュレーターを起動し動作確認

eclipseメニューの「実行」→「実行」でエミュレータを起動させて動作確認。

はい。確認できましたね?さて次のステップに進みましょう。・・・みたいな感じの記事がばかりで困る!!
なぜかエミュレーターが起動しないんだよー。
筆者は様々なエラーでつまづく星の元に生まれたので、そのエラー例を以下に紹介します。

・パッケージ内のどれかで 構文エラー
→解決策:eclipse 「パッケージ・エクスプローラー」内に 赤いバッテンのマーク がでている場合はそのファイルを開き、ソースコードの右側にあるバッテンをダブルクリックして解決策を読む。または自動的に保管してくれるeclipseの機能も多用する。

・R.javaが見つかりません。と言われている気がするエラー
→解決策:eclipseのメニュー「プロジェクト」→「クリーン」してみる
→解決策:layout/なんちゃら.xml でエラーしてる可能性があるので直す

・AndroidManifest.xmlに先ほど作成したHogehogeActivityの宣言が無くてエラー
→解決策:解決策の参考

・主に画像ファイルを保存するdrawableディレクトリやdrawble-なんちゃらディレクトリに内のファイルのうち、大文字を含むファイル名のファイルが存在することによるエラー
→解決策:ファイル名に大文字を使用せず、小文字とかアンダースコアだけにリネームしましょう

・Androidのプロジェクトビルドターゲットが違うことによるエラー
→解決策:今回のアプリはandroid 2.3.3以上で利用出来るようにしたい。「パッケージ・エクスプローラー」内の該当のパッケージディレクトリツリー内にAndroid 2.3.3 というライブラリ(?)が有るか確認。無ければ「パッケージ・エクスプローラー」の該当のパッケージ名を右クリック→「ビルド・パス」→「ビルド・パスの構成」→「リソース」以下の「Android」をクリック「プロジェクト・ビルド・ターゲット」を「Android 2.3.3」にしてください。

その他、起動しない方に助言できる事は、

なんとかエミュレーターが起動して挙動が確認出来るまでガンガレ!!

ここを乗り切れれば、自分で要領を得て色々と対処できるようになるかと思われ。

・jsonデータを取得してみる

WEBサーバーからjsonデータを取得する。
HogehogeActivity.javaを修正します。
赤文字がHogehogeActivityに追記したところです。


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 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);
            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();
        }
    }
}

なんかいきなり長くなっちったな。

・動作確認

エミュレータを起動して
「ウインドウ」→「ビューの表示」→「その他」→「Android」以下の「LogCat」をクリックするとコンソールのようなものが開きます。開くかな? →ガンガレ!
HogehogeActivityに記述した Log.d(LogTag+” source”,source); がLogCat内に表示されるのを確認してください。

===========================
D/HogehogeLog source( 1466): {“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”}]}
===========================

キタコレ! 記事データがテキストで受け取れた!!


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です