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