2014-02-20 30 views
1

我在那開發一個應用程序,我必須將數據發送到。我得到異常而獲得用戶的詳細信息,空指針異常,請告訴我哪裏出錯了如何從數據發送到AsyncTask從活動?

服務器

myActivity代碼

userDetails = new DetailsDTO(); 

userName = userNameEdit.getText().toString().trim(); 
password = passwordEdit.getText().toString().trim(); 
confirmPwd = confirmPasswordEdit.getText().toString(); 
mobileNo = mobileNoEdit.getText().toString(); 

userDetails.setUserName(userName); 
userDetails.setPassword(password); 
userDetails.setConfirmPwd(confirmPwd); 
userDetails.setMobileNumber(mobileNo); 

(new UserDetailsAsync(mContext)).execute(); 

我的AsyncTask代碼:

@Override 
     protected Void doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      httpClient = new DefaultHttpClient(); 
      httpPost = new HttpPost(TrafficConstants.USER_REG_URL); 


      Log.e("userName", details.getUserName()); 
      Log.e("pass", details.getPassword()); 
      Log.e("MOb",details.getMobileNumber()); 

      try{ 
      arrayList = new ArrayList<NameValuePair>(3); 
      arrayList.add(new 
        BasicNameValuePair("usr",details.getUserName())); 
      arrayList.add(new 
        BasicNameValuePair("pass",details.getPassword())); 
      arrayList.add(new 
        BasicNameValuePair("mob",details.getMobileNumber())); 
      httpPost.setEntity(new UrlEncodedFormEntity(arrayList)); 
      HttpResponse response = httpClient.execute(httpPost); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
      return null; 
     } 

logcat的錯誤

02-20 12:16:37.535: E/AndroidRuntime(2605): java.lang.RuntimeException: An error occured while executing doInBackground() 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at java.lang.Thread.run(Thread.java:856) 
02-20 12:16:37.535: E/AndroidRuntime(2605): Caused by: java.lang.NullPointerException: println needs a message 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at android.util.Log.println_native(Native Method) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at android.util.Log.e(Log.java:231) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at com.technowellServices.locationfind.UserRegistratrionActivity$UserDetailsAsync.doInBackground(UserRegistratrionActivity.java:150) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at com.technowellServices.locationfind.UserRegistratrionActivity$UserDetailsAsync.doInBackground(UserRegistratrionActivity.java:1) 
02-20 12:16:37.535: E/AndroidRuntime(2605):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
+1

張貼堆棧跟蹤 – Raghunandan

+1

安置自己的錯誤日誌,這是logcat的 – InnocentKiller

+0

您已設置數據UserDetails對象,並從細節越來越對象?使用userDetails代替細節 – Sonali8890

回答

5

導致錯誤,而在你的類聲明的AsyncTask,其聲明如下:

class TestAsyncTask extends AsyncTask<Context, Void, Void>{ 

      @Override 
      protected Void doInBackground(Context... params) { 
       // TODO Auto-generated method stub 

          Context context = params[0];         

       return null; 
      } 

     } 

第一個參數爲接受,你想傳遞給您創建的的AsyncTask參數。

此外,稱其爲:

new TestAsyncTask().execute(MyActivity.this); 
+0

@durga:謝謝你接受答案:)你讓我的一天 –

0

試試這個..

new UserDetailsAsync(userName,password,confirmPwd,mobileNo,mContext)).execute(); 

在你的AsyncTask添加構造

 String userName,password,confirmPwd,mobileNo; 
     Context context; 
     // constructor 
     public UserDetailsAsync(String userName,String password,String confirmPwd,String mobileNo, Context context) { 
      this.userName = userName; 
      this.password = password; 
      this.confirmPwd = confirmPwd; 
      this.mobileNo = mobileNo; 
      this.context = context; 
     } 

或者

使用爲userDetails在你的活動作爲public static userDetails

,並在您的AsyncTask

 Log.e("userName", YourActivity.userDetails.getUserName()); 
     Log.e("pass", YourActivity.userDetails.getPassword()); 
     Log.e("MOb", YourActivity.userDetails.getMobileNumber()); 
+0

從獲取方法獲取值是否有錯? – Durga

+0

@Durga不,它不是。你的初始化爲'details = new DetailsDTO();'所以它被初始化爲新的。 – Hariharan

0

嘗試創建userDetails = new DetailsDTO();的實例中的AsyncTask內改變details.getUserName()userDetails .getUserName()

3

最好試試你的對象傳遞給的AsyncTask doInBackground:

@Override 
    protected Void doInBackground(DetailsDTO... params) { 
     // TODO Auto-generated method stub 
     httpClient = new DefaultHttpClient(); 
     httpPost = new HttpPost(TrafficConstants.USER_REG_URL); 

     DetailsDTO userDetails = params[0]; 

     Log.e("userName", userDetails.getUserName()); 
     Log.e("pass", userDetails.getPassword()); 
     Log.e("MOb",userDetails.getMobileNumber()); 

     try{ 
     arrayList = new ArrayList<NameValuePair>(3); 
     arrayList.add(new 
       BasicNameValuePair("usr",userDetails.getUserName())); 
     arrayList.add(new 
       BasicNameValuePair("pass",userDetails.getPassword())); 
     arrayList.add(new 
       BasicNameValuePair("mob",userDetails.getMobileNumber())); 
     httpPost.setEntity(new UrlEncodedFormEntity(arrayList)); 
     HttpResponse response = httpClient.execute(httpPost); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return null; 
    } 

然後在您的Activity類:

new UserDetailsAsync().execute(userDetails); 

如果這樣做沒有幫助,請準確地寫下您的活動課程的150 line,這會使您的應用程序與NPE崩潰。

+0

非常感謝你的工作.. – Durga

0

我認爲你的doinbackground方法返回null。因此,它可以在onpostexecute

相關問題