2017-10-09 42 views
-2

我在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) 
+0

步驟通過其與調試器,看看會發生什麼。 – Vucko

+0

總是嘗試將日誌打印爲Log.e(「String」,「」+ result);'。並看看結果如何。 –

+0

檢查結果的日誌值 –

回答

1

您在finally塊返回null。將return null;移至外部最後阻止

+0

謝謝,我因爲這個小小的疏忽而瘋了 –

+0

不用客氣 – Omer

0

最後是將始終執行的塊(除非將執行system.exit())。這就是爲什麼它總是空。

提示: -始終在日誌中的第二個參數使用" ",否則會拋出異常的無效的情況下,如..消息應該不爲空等等。

Log.e("String", " "+result);