特定の URL から JSON データを取得するアクティビティ「メッセージ」を作成しました。jsonデータを印刷するループを作ってみましたが、問題は別のところにありました。「json」に乗っNullPointerException
ています。JSONArray
メッセージ クラス:
public class Messages extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = (TextView) findViewById(R.id.tv_messages);
JSONArray json = JSONfunctions.getJSONfromURL("http://docs.blackberry.com/sampledata.json");
tv.setText(json.length());
}
JSON 関数クラス:
public class JSONfunctions {
public static JSONArray getJSONfromURL(String url) {
InputStream is = null;
String result = "";
JSONArray jArray = null;
// http post
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
// convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag get data string ",
"Error converting result " + e.toString());
}
try {
jArray = new JSONArray(result);
} catch (JSONException e) {
Log.e("log_tag create object ",
"Error parsing data " + e.toString());
}
return jArray;
}
}
エラー:
08:11:43.683: HTTP 接続のエラー android.os.NetworkOnMainThreadException 08:11:43.693: 結果の変換エラー java.lang.NullPointerException: ロック == null 08:11:43.703: データ org.json.JSONException の解析エラー: 終了08:11:43.723 の文字 0 での入力: VM をシャットダウンしています 08:11:43.733: threadid=1: キャッチされない例外で終了するスレッド (group=0x40a70930) 08:11:43.923: ATAL 例外: メイン 08:11:43.923 : java.lang.RuntimeException: アクティビティ ComponentInfo を開始できません {com.example.sound/com.example.sound.Messages}: java.lang.NullPointerException 08:11:43.923: android.app.ActivityThread.performLaunchActivity(ActivityThread. java:2180) 08:11:43.923: android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 08:11:43.923: android.app.ActivityThread.access$600(ActivityThread.java:141) 08:11 :43.923: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 08:11:43.923: android.os.Handler.dispatchMessage(Handler.java:99) 08:11:43.923: android.os .Looper.loop(Looper.java:137) 08:11:43.923: android.app.ActivityThread.main(ActivityThread.java:5039) 08:11:43.923: java.lang.reflect.Method.invokeNative(ネイティブ)メソッド) 08:11:43.923: java.lang.reflect.Method.invoke(Method.java:511) 08:11:43.923: com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 793) 08:11:43.923: com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 08:11:43.923: dalvik.system.NativeStart.main (ネイティブ メソッド) 08:11:43.923 : 原因: java.lang.NullPointerException 08:11:43.923: com.example.sound.Messages.onCreate(Messages.java:18) 08:11:43.923: android.app.Activity で。performCreate(Activity.java:5104) 08:11:43.923: android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 08:11:43.923: android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
18行目は次のとおりです。
tv.setText(json.length());
上記のエラーの前に、私も多くのエラーを受け取ります:
Unexpected value from nativeGetEnabledTags: 0
私が使用している URL (テスト目的で、http://docs.blackberry.com/sampledata.json ) は動作しています。Android 開発と JSON は初めてです。前もって感謝します。