2011-06-12 33 views
0

我遇到此活動的問題。AsyncTask後的捆綁包中的空指針異常

package com.ilocal.diary; 
import java.util.ArrayList; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 

public class ViewDiary extends Activity { 

    private String userid = "1"; 
    private String response; 
    private String url; 
    private Bundle bundle = new Bundle(); 
    private ArrayList<NameValuePair> postParameters; 
    private ProgressDialog dialog = null; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.empty_layout); 

     this.dialog = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false); 

     bundle = this.getIntent().getExtras(); 
     if (bundle != null) { 
      userid = bundle.getString("USERID"); 
     } 
     url ="http://www.ilocaltest.x10.mx/android/fetchdiary.php"; 
     postParameters = new ArrayList<NameValuePair>(); 
     postParameters.add(new BasicNameValuePair("userid", userid)); 

     new PHPQuery().execute(url, postParameters); 
    } 

    private class PHPQuery extends AsyncTask<Object, Void, String > { 
     protected String doInBackground(Object... params) { 
      try { 
       response = CustomHttpClient.executeHttpPost(url, postParameters); 
      } catch (Exception e) { 
       System.out.println("HTTP error - " + e.toString()); 
      } 
      System.out.println(response); 
      return response; 
     } 

     protected void onPostExecute(String result) { 
      dialog.dismiss(); 
      System.out.println(result); 
      if (!(result == null)) { 
       bundle.putString("RESPONSE", result); 
       Intent i = new Intent(ViewDiary.this, DisplayDiary.class); 
       i.putExtras(bundle); 
       startActivity(i); 
       ViewDiary.this.finish(); 
      } 
      else 
       finish(); 
     } 
    } 
} 

一切工作,直到我嘗試束從的AsyncTask的結果時,我得到一個nullpointerexecption在該行

bundle.putString("RESPONSE", result); 

我知道,結果被傳遞到onPostExecute方法,以便在哪裏例外來自並且如何解決它。

馬丁

+0

隨着'如果{'這應該是爲'如果(結果相同= NULL((結果== NULL)!)! ){''''只是認爲你應該知道這一點,並且'bundle'或'result'必須爲空,我猜測它是結果,因爲如果結果爲空,它只會到達那裏。 – Austin 2011-06-12 03:58:23

+0

你可以在這裏放一個調試日誌,看看它是否運行? bundle = this.getIntent()。getExtras(); if(bundle!= null){ userid = bundle.getString(「USERID」); Log.d(「PHP」,「Found extras」); } – 2011-06-12 03:58:27

+0

@Christopher增加了額外的功能。我已經知道,沒有真正的軟件包,所以創建了一個新的活動,以便發送一個包,並刪除創建一個新的包,它的工作原理。它一定是空的包。但爲什麼這應該有所作爲。在上一個創建bundle的活動中,它將一直是空的,直到將一個字符串放入其中,這與此活動相同。 – martincm 2011-06-12 04:19:25

回答

1

您實例包,但你分配給它this.getIntent().getExtras();這是null如果意圖是在沒有捆綁,這大概就是這樣被解僱。在放入包之前檢查null,如果爲null,則將其實例化。

更妙的是,檢查空getExtras()後實例如果這樣:

bundle = this.getIntent().getExtras(); 
if (bundle == null) 
    bundle = new Bundle(); 
else {//... 
+0

感謝MByD,但問題是把額外的,並沒有得到它們 – martincm 2011-06-12 04:25:40

+0

我試圖開發它作爲一個獨立的活動,然後把它放到主要的應用程序,一旦它工作,所以我想我可以實例化捆綁爲了測試該活動,然後將其刪除後,它將被放置在主應用程序,它將從意圖收到一個捆綁。將來我只會做一個虛擬活動來啓動這個意圖。 – martincm 2011-06-12 04:33:08