Java 从JSON检索数据时出现NullPointer异常
我试图使用JSON从服务器获取数据,并将检索到的数据放入数组 这是检索类别、intitule、id_新闻、图像的功能 但我总是得到NULLPointerException 请帮忙 这些是logCat的踪迹 这是上下文的初始化context context=this强>Java 从JSON检索数据时出现NullPointer异常,java,android,json,nullpointerexception,Java,Android,Json,Nullpointerexception,我试图使用JSON从服务器获取数据,并将检索到的数据放入数组 这是检索类别、intitule、id_新闻、图像的功能 但我总是得到NULLPointerException 请帮忙 这些是logCat的踪迹 这是上下文的初始化context context=this 但它会生成另一个异常NetworkOnMainThreadException和NullPointerException和JSONException:输入结束于字符0。NPE来自Toast初始化。确保传递的上下文不为空 由于您在异常捕
但它会生成另一个异常NetworkOnMainThreadException和NullPointerException和JSONException:输入结束于字符0。NPE来自
Toast
初始化。确保传递的上下文不为空
由于您在异常捕获块中使用Toast,请使用例如e.printStackTrace()
记录异常堆栈跟踪,以获得根本原因。(主要怀疑对象:NetworkOnMainThreadException
)
对于NetworkOnMainThreadException
,请在后台线程上执行网络操作。有关更多信息,请参阅。在Toast调用中,上下文变量很可能为空
从不捕获NullPointerException。确保它永远不会被抛出。正如laalto指出的NPE
将在Toast
语句中出现
您能否给出一个如何初始化上下文的代码片段
还可以尝试在那里使用一次getActivity()
,看看它是否解决了问题
如果确实如此,则覆盖onAttach()
并在其中初始化您的上下文。因为直接给出getActivity()
不是一个好的做法
NetworkOnMainThreadException
是由于您应该在单独的线程上进行网络调用而导致的。
使用类似于:
Thread thread = new Thread()
{
@Override
public void run() {
try {
//your network calls here
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
我通过使用AsynkTask解决了这个问题
private class Asyn_GetNewsFromServer extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
getNewsFromServer(beg);
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//do what ever you want
}
}
私有类Asyn\u GetNewsFromServer扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
getNewsFromServer(beg);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
//你想干什么就干什么
}
}
感谢您的帮助堆栈跟踪是?粘贴异常的strack跟踪ID您尝试在所有Toast语句中编写getactivity()而不是上下文吗?是的,但仍然有相同的问题,请查看我的编辑我进行更新,请检查
Thread thread = new Thread()
{
@Override
public void run() {
try {
//your network calls here
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
private class Asyn_GetNewsFromServer extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
getNewsFromServer(beg);
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//do what ever you want
}
}