Вопрос

I have applied this function to bring data from service when i am getting "true" response it is fine but when i am getting "false" response from server its giving me NPE.How can i handle this error in my code:

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();
        }

    } 

logcat:

> 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

EDIT: 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;
    }


}
Это было полезно?

Решение

The code

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

might be the source of the issue.

If responseEntity.getBody() is null, then userListItemInstance will also be null. Then, when you call userListItemInstance.getUserListItems();, it will throw NullPointerException since userListItemInstance is null.

Edit : I suggest you to create an instance of UserListItemHolder and set the status after that, something like this:

} else {
    userListItemInstance = new UserListItemHolder();
    userListItemInstance.setStatus("false");
    return userListItemInstance.getUserListItems();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top