rest - NullPointerException while making an asmx web service call for JSON data object from Android App using Volley in Android Studio -


i working on arnab's tutorial on volley site. getting nullpointerexception while making asmx web service call json data object android app using volley in android studio. "req" variable causing error in line 84 declare before offending line of code run. here error monitor:

fatal exception: main process: com.caduceususa.app.myapp, pid: 14603 java.lang.nullpointerexception: attempt invoke virtual method 'void com.caduceususa.app.myapp.applicationcontroller.addtorequestqueue(com.android.volley.request)' on null object reference @ com.caduceususa.app.myapp.consumews$1.onclick(consumews.java:84) @ android.view.view.performclick(view.java:5637) @ android.view.view$performclick.run(view.java:22429) @ android.os.handler.handlecallback(handler.java:751) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:154) @ android.app.activitythread.main(activitythread.java:6119) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:886) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:776) 

i have 3 java files in project. first contains oncreate here:

package com.caduceususa.app.myapp;  import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.textview;  import com.android.volley.volleyerror; import com.android.volley.volleylog; import com.android.volley.toolbox.httpheaderparser; import com.android.volley.toolbox.jsonrequest;  import org.json.jsonexception; import org.json.jsonobject;  import java.io.unsupportedencodingexception; import java.util.hashmap;  import com.android.volley.networkresponse; import com.android.volley.parseerror; import com.android.volley.response; import com.android.volley.response.errorlistener; import com.android.volley.response.listener;   public class consumews extends appcompatactivity {      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_consume_ws);          final button submit = (button) findviewbyid(r.id.submit);         final textview status = (textview)findviewbyid(r.id.connstatus);         final textview response = (textview)findviewbyid(r.id.serverresp);           submit.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view view) {                 status.settext("connection requested...");                 response.settext("waiting...");                 jsonobject ocreds = new jsonobject();                  final string url = "https://myapp.caduceususa.com/ws/myapp.asmx/myapplogin";                  hashmap<string, string> params = new hashmap<string, string>();                 params.put("sname", "email@email.com");                 params.put("spass", "password");                  jsonobjectrequest req = new jsonobjectrequest(url, new jsonobject(params),                         new response.listener<jsonobject>() {                             @override                             public void onresponse(jsonobject response) {                                 try {                                     volleylog.v("response:%n %s", response.tostring(4));                                 } catch (jsonexception e) {                                     e.printstacktrace();                                 }                             }                         }, new response.errorlistener() {                     @override                     public void onerrorresponse(volleyerror error) {                         volleylog.e("error: ", error.getmessage());                     }                 });  // add request object queue executed                 applicationcontroller.getinstance().addtorequestqueue(req);              }         });     }        public class jsonobjectrequest extends jsonrequest<jsonobject> {         /**          * creates new request.          * @param method http method use          * @param url url fetch json          * @param jsonrequest {@link jsonobject} post request. null allowed ,          *   indicates no parameters posted along request.          * @param listener listener receive json response          * @param errorlistener error listener, or null ignore errors.          */         public jsonobjectrequest(int method, string url, jsonobject jsonrequest,                                  listener<jsonobject> listener, errorlistener errorlistener) {             super(method, url, (jsonrequest == null) ? null : jsonrequest.tostring(), listener,                     errorlistener);         }         /**          * constructor defaults <code>get</code> if <code>jsonrequest</code>          * <code>null</code>, <code>post</code> otherwise.          *          * @see #jsonobjectrequest(int, string, jsonobject, listener, errorlistener)          */         public jsonobjectrequest(string url, jsonobject jsonrequest, listener<jsonobject> listener,                                  errorlistener errorlistener) {             this(jsonrequest == null ? method.get : method.post, url, jsonrequest,                     listener, errorlistener);         }         @override         protected response<jsonobject> parsenetworkresponse(networkresponse response) {             try {                 string jsonstring =                         new string(response.data, httpheaderparser.parsecharset(response.headers));                 return response.success(new jsonobject(jsonstring),                         httpheaderparser.parsecacheheaders(response));             } catch (unsupportedencodingexception e) {                 return response.error(new parseerror(e));             } catch (jsonexception je) {                 return response.error(new parseerror(je));             }         }     }  } 

my applicationcontroller java file follows:

package com.caduceususa.app.myapp;  import android.app.application; import android.text.textutils;  import com.android.volley.request; import com.android.volley.requestqueue; import com.android.volley.volleylog; import com.android.volley.toolbox.volley;  public class applicationcontroller extends application {      /**      * log or request tag      */     public static final string tag = "volleypatterns";      /**      * global request queue volley      */     private requestqueue mrequestqueue;      /**      * singleton instance of application class easy access in other places      */     private static applicationcontroller sinstance;      @override     public void oncreate() {         super.oncreate();          // initialize singleton         sinstance = this;     }      /**      * @return applicationcontroller singleton instance      */     public static synchronized applicationcontroller getinstance() {         return sinstance;     }      /**      * @return volley request queue, queue created if null      */     public requestqueue getrequestqueue() {         // lazy initialize request queue, queue instance         // created when accessed first time         if (mrequestqueue == null) {             mrequestqueue = volley.newrequestqueue(getapplicationcontext());         }          return mrequestqueue;     }      /**      * adds specified request global queue, if tag specified      * used else default tag used.      *      * @param req      * @param tag      */     public <t> void addtorequestqueue(request<t> req, string tag) {         // set default tag if tag empty         req.settag(textutils.isempty(tag) ? tag : tag);          volleylog.d("adding request queue: %s", req.geturl());          getrequestqueue().add(req);     }      /**      * adds specified request global queue using default tag.      *      * @param req      * @param tag      */     public <t> void addtorequestqueue(request<t> req) {         // set default tag if tag empty         req.settag(tag);          getrequestqueue().add(req);     }      /**      * cancels pending requests specified tag, important      * specify tag pending/ongoing requests can cancelled.      *      * @param tag      */     public void cancelpendingrequests(object tag) {         if (mrequestqueue != null) {             mrequestqueue.cancelall(tag);         }     } } 

and here error helper:

package com.caduceususa.app.myapp;  import android.content.context;  import com.android.volley.authfailureerror; import com.android.volley.networkerror; import com.android.volley.networkresponse; import com.android.volley.noconnectionerror; import com.android.volley.servererror; import com.android.volley.timeouterror; import com.android.volley.volleyerror; import com.google.gson.gson; import com.google.gson.reflect.typetoken;  import java.util.hashmap; import java.util.map;  public class volleyerrorhelper {     /**      * returns appropriate message displayed user      * against specified error object.      *      * @param error      * @param context      * @return      */     public static string getmessage(object error, context context) {         if (error instanceof timeouterror) {             return context.getresources().getstring(r.string.generic_server_down);         }         else if (isserverproblem(error)) {             return handleservererror(error, context);         }         else if (isnetworkproblem(error)) {             return context.getresources().getstring(r.string.no_internet);         }         return context.getresources().getstring(r.string.generic_error);     }      /**      * determines whether error related network      * @param error      * @return      */     private static boolean isnetworkproblem(object error) {         return (error instanceof networkerror) || (error instanceof noconnectionerror);     }     /**      * determines whether error related server      * @param error      * @return      */     private static boolean isserverproblem(object error) {         return (error instanceof servererror) || (error instanceof authfailureerror);     }     /**      * handles server error, tries determine whether show stock message or      * show message retrieved server.      *      * @param err      * @param context      * @return      */     private static string handleservererror(object err, context context) {         volleyerror error = (volleyerror) err;          networkresponse response = error.networkresponse;          if (response != null) {             switch (response.statuscode) {                 case 404:                 case 422:                 case 401:                     try {                         // server might return error { "error": "some error occured" }                         // use "gson" parse result                         hashmap<string, string> result = new gson().fromjson(new string(response.data),                                 new typetoken<map<string, string>>() {                                 }.gettype());                          if (result != null && result.containskey("error")) {                             return result.get("error");                         }                      } catch (exception e) {                         e.printstacktrace();                     }                     // invalid request                     return error.getmessage();                  default:                     return context.getresources().getstring(r.string.generic_server_down);             }         }         return context.getresources().getstring(r.string.generic_error);     } } 

finally here androidmanifest.xml file:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.caduceususa.app.myapp">      <uses-permission android:name="android.permission.internet" />     <uses-permission android:name="android.permission.access_network_state" />      <application         android:allowbackup="true"         android:icon="@mipmap/ic_launcher"         android:label="@string/app_name"         android:roundicon="@mipmap/ic_launcher_round"         android:supportsrtl="true"         android:theme="@style/apptheme">         <activity android:name=".consumews">             <intent-filter>                 <action android:name="android.intent.action.main" />                 <category android:name="android.intent.category.launcher" />             </intent-filter>         </activity>     </application> </manifest> 

i not sure start debug here have seen multiple suggested solutions have tried , figure let me put code out there , maybe can me.

add applicationcontroller class in manifest tag, because missing android:name attribute. not referenced there why getting npe.

disclaimer: author of blog post piece of code referenced (volley usage part)


Comments

Popular posts from this blog

php - Permission denied. Laravel linux server -

google bigquery - Delta between query execution time and Java query call to finish -

python - Pandas two dataframes multiplication? -