2016-01-21 72 views
0

我希望主要活動從一個其他Web服務獲取一些數據。對於這項工作,我使用AsyncTask來連接Web服務。在onCreate方法中顯示XML佈局文件時,它將顯示來自Web服務的數據,該應用程序可以成功運行。但是,當onCreate方法顯示不同的XML佈局文件時,將顯示來自Web服務的數據的佈局文件中,應用程序不起作用,並且logcats在從Web服務獲取的數據中顯示NullPointerException。Android從其他Web服務獲取數據

public class MainActivity extends Activity 
{  
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash_screen);  
     new DownloadSights().execute(); 
    } 

    class DownloadSights extends AsyncTask< Void, Void, Places > 
    { 
     @Override 
     protected void onPreExecute() 
     { 
      super.onPreExecute(); 
     } 

     @Override 
     protected ListKozanisPlaces doInBackground(Void... params) 
     { 
      try 
      { 
       final String url = "http://192.168.1.3:8080/.../getSights"; 
       InputStreamReader reader = new InputStreamReader(new URL(url).openStream()); 
       Places sightsList = new Gson().fromJson(reader, Places.class); 
       return sightsList; 
      } 
      catch (Exception e) 
      { 
       Log.e("CityCuide", e.getMessage()); 
      } 
      return null; 
     } 


     @Override 
     protected void onPostExecute(Places sightsList) 
     { 
      TextView testTextView = (TextView) findViewById(R.id.testTextView); 
      testTextView.setText(sightsList.getList().get(1).toString()); 
     } 
    } 
} 

位於行中的錯誤:

testTextView.setText(sightsList.getList()得到(1)的ToString());

logcat中顯示:

01-22 01:31:12.211: E/AndroidRuntime(5455): FATAL EXCEPTION: main 
01-22 01:31:12.211: E/AndroidRuntime(5455): java.lang.NullPointerException 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at com.example.androidkozaniwebserviceclient.SplashScreenActivity$DownloadSights.onPostExecute(SplashScreenActivity.java:66) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at com.example.androidkozaniwebserviceclient.SplashScreenActivity$DownloadSights.onPostExecute(SplashScreenActivity.java:1) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at android.os.Looper.loop(Looper.java:137) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-22 01:31:12.211: E/AndroidRuntime(5455):  at dalvik.system.NativeStart.main(Native Method) 
+0

請發表您的logcat –

+0

編輯我的帖子.. –

回答

1

如果裝入不同的XML佈局,它不會有一個名爲testTextView TextView的。這將使findViewById返回null。當你嘗試調用setText時,會在onPostExecute中導致NullPointerException。

這個問題是一種微不足道的,但在將來請附上任何崩潰的bug的堆棧跟蹤。

+0

如果我使用的文本文件,從Web服務保存數據,應用程序不會因爲同樣的錯誤工作... –

+0

它沒有任何使用web服務,它與將數據加載到UI中有關。 –

+0

你可以發佈你的佈局XML文件,以便我們可以確定嗎? –

0

確定sightsList不是null,如果你確信Gabe的答案。 我建議你將testTextView.setText(sightsList.getList().get(1).toString());分成幾部分,以便輕鬆找出發生的事情。

List targetList = sightsList.getList(); 
String data = targetList.get(1).toString(); // this index 1 might return null also 
textTextView.setText(data); 
+0

sightsList不爲空,因爲當onCreate()方法顯示XML佈局文件時,它將顯示來自Web服務的數據,應用程序可以成功運行。我用一個文件改變TextViews,但現在我有NullPointerException在:outputStream.println(sightsList.getList()。get(1).toString()); –

+0

很明顯,問題在於sListList.getList()。get(1).toString()部分。你在索引1處得到什麼?您是否按照我的建議嘗試破解代碼? –