Google Android WebAPIプログラミング入門を読んでいて

第9章 「もう少し実用的なクライアントを目指す」のアプリが動かねー

「Google Android WebAPIプログラミング入門」(横山隆司著)の第9章の「9-4 もう少し実用的なクライアントを目指す」で、本の通りにコーディングしても、Facebookクライアントがニュースフィードを取得できません。下記の問題点があります。多分、本執筆後、APIに変更があって、アプリが正常動作しなくなったのでしょう。順を追って解決していきます。

1. logcatにorg.json.JSONException: No value for dataが出る

FacebookHomeFactory.javaの

JSONArray dataArray = rootObject.getJSONArray("data");

で、org.json.JSONException: No value for dataになっています。このコードの前辺りに、

Log.i("TAG", "response = " + response);

Log.i("TAG, "rootObject = " + rootObject);

を書いて、実行すると、logcatに

I/TAG ( 436): response = {"error":{"message":"(#200) Requires extended permission: read_stream","type":"OAuthException"}}

I/TAG ( 436): rootObject = {"error":{"type":"OAuthException","message":"(#200) Requires extended permission: read_stream"}}

と出力されます。ググると、http://facebook-docs.oklahome.net/archives/51892628.htmlとかが引っかかり、MainActivity.javaの

mFacebook.authorize(this, new DialogListener() {

mFacebook.authorize(this, new String[] {"read_stream"}, new DialogListener() {

と書き換え、アプリユーザに追加のパーミッションread_streamを求めるように設定するといい。

2. logcatにまたまた org.json.JSONException: No value for data が出る。

エラーが出ている行番号を見ると、FacebookHomeFactory.javaのif(data.has("comments"))ブロック内の

JSONArray array = res_comments.getJSONArray("data");

でエラーが発生していることが分かります。この文の前辺りに、

Log.i("TAG", "res_comments = " + res_comments);

を書いて実行すると、

I/TAG ( 1321): res_comments = {"count":0}

が出力されます。コメントがなく、"data"のJSONArrayが取れないということです。これは、

int count = res_comments.getInt("count");

の文を前に書いて、

JSONArray array = res_comments.getJSONArray("data");

の行から、

comments_array.add(comments_data);

の行まで行を、if (count != 0) ブロックの中に入れれば解決します。

3. logcatに org.json.JSONException: No value for message が出る。

logcatの出力を見ると、

news.setMessage(Uri.decode(data.getString("message")));

の行でエラーが出ています。ニュースフィードにメッセージがないとき、エラーがでるようなので、

String message = "";

try {

message = data.getString("message");

news.setMessage(Uri.decode(data.getString("message")));

} catch (JSONException je2) {

news.setMessage(message);
}

と書き換えると、問題は解消されます。

4. Androidキーハッシュを開発者ページで登録する必要がある?

これは、アプリが動かないとき、真っ先にやったことで、必須か分かりません。http://ayakix-lablog.blogspot.com/2011/08/facebookandroid.htmlなどを見てキーハッシュを作成し、開発ページに登録しましょう。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-01-17 (火) 21:36:07 (1983d)