google / volley

https://google.github.io/volley
Apache License 2.0
3.37k stars 751 forks source link

NullPointerException: Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.toolbox.StringRequest.setTag(java.lang.Object)' on a null object reference #414

Closed surajsahani closed 3 years ago

surajsahani commented 3 years ago

Screenshot from 2021-06-02 15-32-03

surajsahani commented 3 years ago
public class MainActivity extends AppCompatActivity {

    public static final String TAG = "MyTag";
    StringRequest stringRequest; // Assume this exists.
    RequestQueue requestQueue;  // Assume this exists.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView textView = (TextView) findViewById(R.id.text);

        // Set the tag on the request.
        stringRequest.setTag(TAG);

       // Add the request to the RequestQueue.
        requestQueue.add(stringRequest);

        // Instantiate the RequestQueue.
        RequestQueue queue = Volley.newRequestQueue(this);
        String url ="https://www.google.com";

        // Request a string response from the provided URL.
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Display the first 500 characters of the response string.
                        textView.setText("Response is: "+ response.substring(0,500));
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                textView.setText("That didn't work!");
            }
        });

        // Add the request to the RequestQueue.
        queue.add(stringRequest);
    }
    @Override
    protected  void onStop () {
        super.onStop();
        if (requestQueue != null) {
            requestQueue.cancelAll(TAG);
        }
    }
}
surajsahani commented 3 years ago

logcat respons

2021-06-02 15:31:35.300 13104-13104/martialcoder.surajsahani.myvolly2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: martialcoder.surajsahani.myvolly2, PID: 13104
    java.lang.RuntimeException: Unable to start activity ComponentInfo{martialcoder.surajsahani.myvolly2/martialcoder.surajsahani.myvolly2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.toolbox.StringRequest.setTag(java.lang.Object)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6806)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.toolbox.StringRequest.setTag(java.lang.Object)' on a null object reference
        at martialcoder.surajsahani.myvolly2.MainActivity.onCreate(MainActivity.java:31)
        at android.app.Activity.performCreate(Activity.java:7224)
        at android.app.Activity.performCreate(Activity.java:7213)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:201) 
        at android.app.ActivityThread.main(ActivityThread.java:6806) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) 
2021-06-02 15:31:35.323 13104-13104/martialcoder.surajsahani.myvolly2 I/Process: Sending signal. PID: 13104 SIG: 9
jpd236 commented 3 years ago

The crash is because StringRequest is null. Your code snippet seems very out of order - you invoke setTag, add a request to the queue, then create the queue, then create the request, then add the request again. Presumably the correct order would be something like create the queue, create the request, set the tag, then add the request. I don't know what your comment "Assume this exists" next to StringRequest would mean here, because the crash would indicate that it doesn't.

I don't see a Volley bug here.