2015-10-14 52 views
0

我正在一個Android應用程序中,我在同一個類中使用AsyncTask作爲活動。在我有一個線程模型之前,我會加入該線程並等待,直到我有回覆。但是,當它鎖定用戶界面時,我正在將我的代碼遷移到異步任務。爲其他方法順利進行,但在沒有收到任何內容的情況下,我會收到錯誤信息。Android:AsyncTask onPostExecute得到空回覆

由於服務器在本地主機本身,我記錄,我發出了答覆。此外,它很好地適用於線程。我究竟做錯了什麼?

錯誤日誌:

10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime: FATAL EXCEPTION: main 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime: Process: internetlegion.twentynotes, PID: 31746 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object org.springframework.http.ResponseEntity.getBody()' on a null object reference 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at internetlegion.twentynotes.Activity.GroupAccountActivity$getGroupAccountsForLoggedInUser.onPostExecute(GroupAccountActivity.java:125) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at internetlegion.twentynotes.Activity.GroupAccountActivity$getGroupAccountsForLoggedInUser.onPostExecute(GroupAccountActivity.java:108) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at android.os.AsyncTask.finish(AsyncTask.java:632) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:155) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5696) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:372) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) 
10-14 13:47:00.917 31746-31746/internetlegion.twentynotes E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 

GroupAccountActivity:

public class GroupAccountActivity extends Activity { 

    private ResponseEntity<RestGroupAccount[]> responseEntity; 

    GroupAccountAdapter groupAccountAdapter; 

    final String groupAccountRetrieveURL = StaticRestTemplate.baseURL+"getgroupsforuser/"; 
@Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_group_account); 

     if(isOnline()) { 
      new getGroupAccountsForLoggedInUser().execute(); 
     }else { 
      Toast.makeText(getApplicationContext(),"No Internet connection",Toast.LENGTH_LONG).show(); 
     } 
} 
    public class getGroupAccountsForLoggedInUser extends AsyncTask<Void,Void,ResponseEntity<RestGroupAccount[]>>{ 

     @Override 
     protected ResponseEntity<RestGroupAccount[]> doInBackground(Void... params) { 
      RestTemplate restTemplate = StaticRestTemplate.getRest(); 
      HttpHeaders requestHeaders = new HttpHeaders(); 
      requestHeaders.add("Cookie", "JSESSIONID=" + StaticRestTemplate.jsessionid); 
      requestHeaders.setAccept(Collections.singletonList(new MediaType("application", "json"))); 
      HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders); 
      restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
      return restTemplate.exchange(groupAccountRetrieveURL, HttpMethod.GET, requestEntity, RestGroupAccount[].class); 
     } 

     @Override 
     protected void onPostExecute(ResponseEntity<RestGroupAccount[]> entity) { 
      super.onPostExecute(entity); 
// Line below is throwing error. 
      RestGroupAccount[] restGroupAccounts = responseEntity.getBody(); 
      Collections.addAll(restGroupAccountList, restGroupAccounts); 

      ArrayList<HashMap<String, String>> groupList = new ArrayList<HashMap<String, String>>(); 
} 

} 

請讓我知道。非常感謝。 :-)

回答

2

您在onPostExecute中引用了錯誤的對象。你應該引用結果對象/參數。

你的代碼更改爲:

RestGroupAccount[] restGroupAccounts = entity.getBody(); 
+1

那是天真的我。非常感謝。 :-)我會在11分鐘內接受你的回答,因爲我說現在不行。 –

2

responseEntity永遠不會初始化。

我想你想做的事

RestGroupAccount[] restGroupAccounts = entity.getBody(); 
2

我想我找到了錯誤。你要做的就是

RestGroupAccount[] restGroupAccounts = responseEntity.getBody();

但在onPostExecute的反應叫做entity

你宣佈responseEntity以上,如:

private ResponseEntity<RestGroupAccount[]> responseEntity;

但是,一個不包含響應。

嘗試改變

RestGroupAccount[] restGroupAccounts = responseEntity.getBody();

RestGroupAccount[] restGroupAccounts = entity.getBody();