2013-03-07 162 views
0

嘿,你可以看看我的錯誤,我的logcat說這是因爲我得到空指針異常。我不明白爲什麼。我只是添加了一個字符串變量,它是「電子郵件」,並使我的eadd的值代表電子郵件地址等於它,然後我現在有這些錯誤。你能指點我這個問題嗎?在AsyncTask中獲取空指針異常?

這是我的代碼:

**

public class LoginSub extends Activity { 
    public static String Email; 
    // Progress Dialog 
    private ProgressDialog pDialog; 

    JSONParser jsonParser = new JSONParser(); 
    EditText inputEmail; 
    EditText inputPassword; 
    TextView TextView1; 

    // url to create new product 
    //private static String url_create_product = "http://student-thesis.netii.net/log_in.php"; 
    private static String url_create_product = "http://10.0.2.2/TheCalling/log_in.php"; 

    // JSON Node names 
    private static final String TAG_SUCCESS = "success"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Edit Text 
     inputEmail = (EditText) findViewById(R.id.inputEmail); 
     inputPassword = (EditText) findViewById(R.id.inputPassword); 


     // Create button 
     Button btnLogin = (Button) findViewById(R.id.btnLogin); 

     // button click event 
     btnLogin.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       // creating new product in background thread 
       new phpconnect().execute(); 
      } 
     }); 

     Button btnReg = (Button) findViewById(R.id.btnReg); 
     // button click event 
     btnReg.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent i = new Intent(getApplicationContext(), Register.class); 
       startActivity(i); 
      } 
     }); 
    } 

    /** 
    * Background Async Task to Create new product 
    * */ 
    class phpconnect extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(LoginSub.this); 
      pDialog.setMessage("Logging in.."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     /** 
     * Creating product 
     * */ 
     protected String doInBackground(String... args) { 
      String eadd = inputEmail.getText().toString(); 
      String password = inputPassword.getText().toString(); 


      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("eadd", eadd)); 
      params.add(new BasicNameValuePair("password", password)); 

      // getting JSON Object 
      // Note that create product url accepts POST method 
      JSONObject json = jsonParser.makeHttpRequest(url_create_product, 
        "POST", params); 

      // check log cat fro response 
      Log.d("Create Response", json.toString()); 

      // check for success tag 
      try { 
       int success = json.getInt(TAG_SUCCESS); 
       Email.equals(eadd); 
       if (success == 1) { 
        // successfully created product 
        Intent i = new Intent(getApplicationContext(), Mapping.class); 
        startActivity(i); 
        // closing this screen 
        finish(); 
       } else { 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     /** 
     * After completing background task Dismiss the progress dialog 
     * **/ 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog once done 
      pDialog.dismiss(); 
     } 

    } 
} 

**

,這裏是我的logcat錯誤:

**

03-06 22:21:16.428: E/AndroidRuntime(1417): FATAL EXCEPTION: AsyncTask #1 
03-06 22:21:16.428: E/AndroidRuntime(1417): java.lang.RuntimeException: An error occured while executing doInBackground() 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at android.os.AsyncTask$3.done(AsyncTask.java:278) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at java.lang.Thread.run(Thread.java:856) 
03-06 22:21:16.428: E/AndroidRuntime(1417): Caused by: java.lang.NullPointerException 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at com.example.projectthesis.LoginSub$phpconnect.doInBackground(LoginSub.java:129) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at com.example.projectthesis.LoginSub$phpconnect.doInBackground(LoginSub.java:1) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
03-06 22:21:16.428: E/AndroidRuntime(1417):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 

**

謝謝你們。

+0

確保inputEmail不爲空,這可能是你所得到的理由嘗試調用getText方法時的nullexception – Waqas 2013-03-07 07:01:01

回答

1

doInBackGround()

if (success == 1) { 
    // successfully created product 
    Intent i = new Intent(LoginSub.this, Mapping.class); 
    startActivity(i); 
    // closing this screen 
    finish(); 
} else { 
    } 

除去此塊和onPostExecute()

protected void onPostExecute(String file_url) 
{ 
    // dismiss the dialog once done 
    pDialog.dismiss(); 
    if (success == 1) 
    { 
     // successfully created product 
     Intent i = new Intent(getApplicationContext(), Mapping.class); 
     startActivity(i); 
     // closing this screen 
     finish(); 
    } 
    else 
    { 
    } 
} 
+0

它不會改變任何內容。 :(但是,謝謝你。 – MakAdin 2013-03-07 07:00:02

+0

仍然是你得到例外? – 2013-03-07 07:00:52

+0

嗯。不。它現在消失了,但我有更多的錯誤。XD – MakAdin 2013-03-07 07:02:57

0

添加它有時候getApplicationContext()不會提供確切的上下文值。所以通過 上下文上下文; //聲明 context = this; //在setcontextview之後分配下一行。 然後傳遞上下文而不是getApplicationContext()。並檢查它,如果你想做任何UI更新,你不應該在doinBackground()中做。你必須在後期執行。

希望這會幫助你。

+0

O_o whoooa,我不明白男人,初學者在這裏:)但我欣賞你的答案謝謝你。 – MakAdin 2013-03-07 07:17:04

0

我想是因爲這條線

new phpconnect().execute(); 

class phpconnect extends AsyncTask<String, String, String> { 

您與< 字符串申報的AsyncTask,字符串,字符串>但你沒有傳遞任何.exeute參數() ;

此外,從你的代碼中不想要的AsyncTask任何參數,所以你應該聲明你的AsyncTask這樣

class phpconnect extends AsyncTask<Void, Void, Void> {