我在Android Studio中有一個非常基本的程序,它從一個網站(「https://jsonparsingdemo-cec5b.firebaseapp.com/jsonData/moviesDemoItem.txt」)獲取一個Json對象,並在屏幕上顯示它,而不用解析它。 Json對象被正確傳輸,但是在onPostExecute中,String結果似乎爲null,Log.e(「setText」)拋出NullPointerException,而Log.e(「String」)正確,IOException也不是MalformedURLException異常被拋出:onPostExecute沒有收到字符串
try {
url = new URL("https://jsonparsingdemo-cec5b.firebaseapp.com/jsonData/moviesDemoItem.txt");
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
Log.e("TRY", "trybracket");
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
String result = buffer.toString();
Log.e("String", result);
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
Log.e("MUE", "Malformed");
} catch (IOException e) {
e.printStackTrace();
Log.e("IOE", "IOException");
} finally {
if (connection != null) {
connection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
tvData.setText(result);
Log.e("setText", result);
}
}
而且這是我的logcat:
E/TRY: trybracket
E/String: { "movies": [{"movie": "Avengers","year": 2012}]}
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process com.stasiak.jsonparsing, PID: 20061
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.e(Log.java:238)
at com.stasiak.jsonparsing.MainActivity$JSONTask.onPostExecute(MainActivity.java:96)
at com.stasiak.jsonparsing.MainActivity$JSONTask.onPostExecute(MainActivity.java:39)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.-wrap1(Unknown Source:0)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)<1 internal calls>
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
步驟通過其與調試器,看看會發生什麼。 – Vucko
總是嘗試將日誌打印爲Log.e(「String」,「」+ result);'。並看看結果如何。 –
檢查結果的日誌值 –