My android app receives data from a servlet as a JSON string. The string is a valid JSON string. I use the exact same ProfileBean class on the servlet side, and run gson.fromJson() to deserialize the string and store the bean in a db, which works fine. For some reason on the android side, the call gson.fromJson() causes a null pointer exception.
protected ProfileBean doInBackground(ProfileBean... params) {
...
InputStream is = httpConn.getInputStream();
DataConversion dc = new DataConversion();
String jsonString = dc.convertStreamToString2(is);
is.close();
Log.d(jsString, jsonString.substring(0, 200));
Log.d(jsString, jsonString.substring(jsonString.length() - 200, jsonString.length()));
Log.d(jsString, String.valueOf(jsonString.length()) );
pfb = gson.fromJson(jsonString, ProfileBean.class);
...
}
This is the ProfileBean class for pub:
public class ProfileBean implements Serializable{
String name;
String email;
String homeCity;
String password;
String img;
/**
* Takes 5 String parameters. Representing the data of a new user.
* @param name
* @param email
* @param homeCity
* @param password
* @param img
*/
public ProfileBean(String name, String email, String homeCity, String password, String img){
this.name = name;
this.email=email;
this.homeCity=homeCity;
this.password=password;
this.img = img;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getHomeCity() {
return homeCity;
}
public void setHomeCity(String homeCity) {
this.homeCity = homeCity;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
}
I have been struggling with this all morning, checked the docs for Async task, Gson, and other similar stack overflow questions. I thought the problem was with the ProfileBean class, but as mentioned it works on the Servlet side. I'm stuck, any help would be greatly appreciated.
This is the log message:
04-02 14:09:42.490 25449-25449/com.danielsapps.packbuddy W/System.err: java.util.concurrent.ExecutionException: java.lang.NullPointerException
04-02 14:09:42.525 25449-26309/com.danielsapps.packbuddy W/dalvikvm: threadid=13: thread exiting with uncaught exception (group=0x411932a0)
04-02 14:09:42.560 25449-25449/com.danielsapps.packbuddy W/System.err: at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:223)
04-02 14:09:42.560 25449-25449/com.danielsapps.packbuddy W/System.err: at java.util.concurrent.FutureTask.get(FutureTask.java:82)
04-02 14:09:42.565 25449-25449/com.danielsapps.packbuddy W/System.err: at android.os.AsyncTask.get(AsyncTask.java:482)
04-02 14:09:42.565 25449-25449/com.danielsapps.packbuddy W/System.err: at com.danielsapps.packbuddy.HostelSearch.searchForHostelsAndSetUiData(HostelSearch.java:47)
04-02 14:09:42.565 25449-25449/com.danielsapps.packbuddy W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
04-02 14:09:42.565 25449-25449/com.danielsapps.packbuddy W/System.err: at java.lang.reflect.Method.invoke(Method.java:511)
04-02 14:09:42.565 25449-25449/com.danielsapps.packbuddy W/System.err: at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
04-02 14:09:42.565 25449-25449/com.danielsapps.packbuddy W/System.err: at android.view.View.performClick(View.java:4232)
04-02 14:09:42.565 25449-25449/com.danielsapps.packbuddy W/System.err: at android.view.View$PerformClick.run(View.java:17298)
04-02 14:09:42.565 25449-25449/com.danielsapps.packbuddy W/System.err: at android.os.Handler.handleCallback(Handler.java:615)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: at android.os.Handler.dispatchMessage(Handler.java:92)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: at android.os.Looper.loop(Looper.java:137)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: at android.app.ActivityThread.main(ActivityThread.java:4921)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: at java.lang.reflect.Method.invoke(Method.java:511)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: at dalvik.system.NativeStart.main(Native Method)
04-02 14:09:42.570 25449-25449/com.danielsapps.packbuddy W/System.err: Caused by: java.lang.NullPointerException
04-02 14:09:42.575 25449-25449/com.danielsapps.packbuddy W/System.err: at com.danielsapps.packbuddycontroller.HostelSearchController.doInBackground(HostelSearchController.java:81)
04-02 14:09:42.575 25449-25449/com.danielsapps.packbuddy W/System.err: at com.danielsapps.packbuddycontroller.HostelSearchController.doInBackground(HostelSearchController.java:32)
04-02 14:09:42.575 25449-25449/com.danielsapps.packbuddy W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-02 14:09:42.575 25449-25449/com.danielsapps.packbuddy W/System.err: at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-02 14:09:42.575 25449-25449/com.danielsapps.packbuddy W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-02 14:09:42.575 25449-25449/com.danielsapps.packbuddy W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-02 14:09:42.575 25449-25449/com.danielsapps.packbuddy W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-02 14:09:42.575 25449-25449/com.danielsapps.packbuddy W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-02 14:09:42.580 25449-25449/com.danielsapps.packbuddy W/System.err: at java.lang.Thread.run(Thread.java:856)
04-02 14:09:42.690 25449-26309/com.danielsapps.packbuddy E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.NullPointerException
at com.danielsapps.packbuddycontroller.HostelSearchController.doInBackground(HostelSearchController.java:81)
at com.danielsapps.packbuddycontroller.HostelSearchController.doInBackground(HostelSearchController.java:32)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)