Android JSON GET请求上的java.lang.NullPointerException与截取

Android JSON GET请求上的java.lang.NullPointerException与截取,android,json,nullpointerexception,get,android-volley,Android,Json,Nullpointerexception,Get,Android Volley,我试图发送一个GET请求,通过一个身份验证令牌头来获取一些JSON数据,但是我得到了到处都是的java.lang.NullPointerException。我已经尝试过JSONObjectRequest、JSONArrayRequest,甚至还尝试过StringRequest 以下是代码(JSONObjectRequest和JSONArrayRequest在测试中被注释): 11-20 13:44:28.623 14599-14599/com.x.app D/AndroidRuntime﹕ 关闭

我试图发送一个GET请求,通过一个身份验证令牌头来获取一些JSON数据,但是我得到了到处都是的java.lang.NullPointerException。我已经尝试过JSONObjectRequest、JSONArrayRequest,甚至还尝试过StringRequest

以下是代码(JSONObjectRequest和JSONArrayRequest在测试中被注释):

11-20 13:44:28.623 14599-14599/com.x.app D/AndroidRuntime﹕ 关闭虚拟机 11-20 13:44:28.623 14599-14599/com.x.app W/dalvikvm﹕ threadid=1:线程以未捕获异常退出(组=0x41642ce0) 11-20 13:44:28.643 14599-14599/com.x.app E/AndroidRuntime﹕ 致命异常:主 进程:com.stackerz.app,PID:14599 java.lang.NullPointerException 位于android.content.ContextWrapper.getCacheDir(ContextWrapper.java:230) 位于com.android.volley.toolbox.volley.newRequestQueue(volley.java:43) 位于com.android.volley.toolbox.volley.newRequestQueue(volley.java:78)

很难找出发生了什么,因为错误不是很具有描述性。如果这太明显了,我提前道歉,但这是我的第一个应用程序,我就是无法让它工作。我非常感谢你的帮助

**更新:

我可能发现了一些有用的东西。我使用其他变量声明将行“RequestQueue queue=Volley.newRequestQueue(this);”移到了方法的顶部,调试之后,它似乎就在这里崩溃了,甚至在使用JSONObjectRequest或StringRequest命令之前。队列似乎有问题

**更新2:

我通过添加Singleton类扩展应用程序(还必须将其作为应用程序而不是活动添加到清单中)解决了队列问题,具体步骤如下:

但是,我仍然有例外:

java.lang.NullPointerException
        at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
        at org.json.JSONTokener.nextValue(JSONTokener.java:94)
        at org.json.JSONObject.<init>(JSONObject.java:155)
        at org.json.JSONObject.<init>(JSONObject.java:172)
java.lang.NullPointerException
位于org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
位于org.json.JSONTokener.nextValue(JSONTokener.java:94)
位于org.json.JSONObject(JSONObject.java:155)
位于org.json.JSONObject(JSONObject.java:172)

在调试期间,我注意到它直接从“getRequest”声明(无论是JSONObjectRequest、JSONArrayRequest还是StringRequest)跳到Response.ErrorListener()。看起来它甚至没有尝试连接到URL。我从REST浏览器测试了与URL的连接,并确认其工作正常,生成了JSON输出。

似乎截击。newRequestQueue(this)的“this”为空。

全部修复了添加单例类扩展应用程序的问题(还必须将其作为应用程序而不是活动添加到清单中)以下步骤如下:


另一个异常是由于volley上的异步连接花费的时间太长而导致的。我通过在加载应用程序之前调用该方法进行了修复,为截击提供了执行操作的时间。

代码一定有问题

Volley.newRequestQueue(this)
方法签名为bolow:

public static RequestQueue newRequestQueue(Context context) {
    return newRequestQueue(context, null);
}

因此,您传递的this应该是一个类似于活动实例的上下文,或者是一个应用程序上下文。应用程序上下文更好。

在manifeat应用程序标记中添加您的单例类名

单身阶级

class VolleyApplication extends Application {
----
----
}
<application
    android:name=".VolleyApplication"  --> Add this line
    ...>
    ...
</application>


class VolleyApplication extends Application {
----
----
}
<application
    android:name=".VolleyApplication"  --> Add this line
    ...>
    ...
</application>
添加此行
...>
...

您是否在活动或片段中发送请求?如果片段执行此Volley.newRequestQueue(this.getActivity())操作,请尝试将您的活动引用传递给getJSON(),并使用此活动引用而不是此引用。我从活动发送它,但是连接是从NavigationDrawer片段触发的。这可能是问题的原因吗?基本上,MainActivity调用“instances=NovaJSON.shared().receiveData(novaURL,authToken);”这是NovaJSON类/活动中的一个方法,然后将URL和令牌发送到getJSON()方法。我可以确认URL和令牌字符串成功地访问了该方法,但是在尝试连接URL后,Volley崩溃了。只需再次检查,它不是空的:this=com.stacrz.app。NovaJSON@42162e58The问题实际上是请求队列。我创建了一个名为VolleySingleton的应用程序类,并更改了对指向新类中方法的队列的调用:queue=VolleySingleton.getInstance(this.getRequestQueue();添加(getRequest);