0

当我收到“真”响应时,我已应用此功能从服务中获取数据,这很好,但是当我从服务器收到“假”响应时,它给了我 NPE。如何在我的代码中处理此错误:

public User getLoginResult(String userName, String password,
            String apkVersion) {
        MultiValueMap<String, Object> formData = new LinkedMultiValueMap<String, Object>();
        // how to pass parameters

        formData.add("username",userName);
        formData.add("password",password);
        formData.add("apkStatusDate",apkVersion);
        System.out.print("form data values:" + formData);
        // Populate the MultiValueMap being serialized and headers in an
        // HttpEntity object to use for the request
        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(
    formData, WorkflowRestService.getInstance().getRequestHeaders());
        ResponseEntity<UserListItemHolder> responseEntity = WorkflowRestService
                .getInstance()
                .getRestTemplate()
                .exchange(WorkflowApp.getServicesURL() + "user/logIn",
                        HttpMethod.POST, requestEntity,
                        UserListItemHolder.class);

        Log.i("response Entity Login", "" + responseEntity);
        UserListItemHolder userListItemInstance = responseEntity.getBody();
        Log.i("response Entity Body Login Function",
                "" + responseEntity.getBody());
        /*if ("true".equals(userListItemInstance.getApkStatus())) {
            Log.i("LoginListService if condition", ""
                    + userListItemInstance.getUserListItems());*/
        if("true".equals(userListItemInstance.getStatus()))
        {
            Log.i("LoginListService if condition", ""
                    + userListItemInstance.getUserListItems());
            return userListItemInstance.getUserListItems();
        } else {
            Log.i("LoginListService else condition", ""
                    + userListItemInstance.getUserListItems());
            // return Collections.EMPTY_LIST;
            userListItemInstance.setStatus("false");
            return userListItemInstance.getUserListItems();
        }

    } 

日志猫

> 01-28 22:51:45.620: I/LoginListService else condition(5438): null
01-28 22:51:45.625: W/dalvikvm(5438): threadid=11: thread exiting with uncaught exception (group=0x416012a0)
01-28 22:51:45.630: E/AndroidRuntime(5438): FATAL EXCEPTION: AsyncTask #1
01-28 22:51:45.630: E/AndroidRuntime(5438): java.lang.RuntimeException: An error occured while executing doInBackground()
01-28 22:51:45.630: E/AndroidRuntime(5438):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at java.lang.Thread.run(Thread.java:856)
01-28 22:51:45.630: E/AndroidRuntime(5438): Caused by: java.lang.NullPointerException
01-28 22:51:45.630: E/AndroidRuntime(5438):     at com.mrfs.android.surveyapp.loader.LoginLoader.loadInBackground(LoginLoader.java:49)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at com.mrfs.android.surveyapp.loader.LoginLoader.loadInBackground(LoginLoader.java:1)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:301)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:68)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:56)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-28 22:51:45.630: E/AndroidRuntime(5438):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-28 22:51:45.630: E/AndroidRuntime(5438):     ... 4 more

编辑UserListItemHolder.java

package com.mrfs.android.surveyapp.model;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;


@JsonIgnoreProperties(ignoreUnknown=true)
public class UserListItemHolder  {

    private String status;
    private String apkStatus;
    private String message;
    public void setStatus(String status) {
        this.status = status;
    }
    public String getStatus() {
        return status;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
    public void setApkStatus(String apkStatus) {
        this.apkStatus = apkStatus;
    }
    public String getApkStatus() {
       return apkStatus;
    }
    @JsonProperty(value ="user")
    private User userListItem;
    public User getUserListItems() {
        return userListItem;
    }
  public void setUserListItems(User userListItem) {
        this.userListItem = userListItem;
    }


}
4

1 回答 1

0

编码

UserListItemHolder userListItemInstance = responseEntity.getBody(); // null
...
Log.i("LoginListService else condition", ""
    + userListItemInstance.getUserListItems());
userListItemInstance.setStatus("false");
return userListItemInstance.getUserListItems();

可能是问题的根源。

如果responseEntity.getBody()null,那么userListItemInstance也是null。然后,当你调用时,userListItemInstance.getUserListItems();它会抛出is 。NullPointerExceptionuserListItemInstancenull

编辑: 我建议您创建一个实例UserListItemHolder并在此之后设置状态,如下所示:

} else {
    userListItemInstance = new UserListItemHolder();
    userListItemInstance.setStatus("false");
    return userListItemInstance.getUserListItems();
}
于 2014-01-28T07:08:27.037 回答