Android 执行异步任务时出现空指针异常
我试图通过从网站加载json来填充gridlayout,它必须在单击时显示图像、名称和链接 尝试使用asynctask填充时,我遇到以下错误:Android 执行异步任务时出现空指针异常,android,gridview,android-asynctask,Android,Gridview,Android Asynctask,我试图通过从网站加载json来填充gridlayout,它必须在单击时显示图像、名称和链接 尝试使用asynctask填充时,我遇到以下错误: 03-14 15:02:11.053: E/AndroidRuntime(10155): FATAL EXCEPTION: main 03-14 15:02:11.053: E/AndroidRuntime(10155): java.lang.NullPointerException 03-14 15:02:11.053: E/AndroidRuntim
03-14 15:02:11.053: E/AndroidRuntime(10155): FATAL EXCEPTION: main
03-14 15:02:11.053: E/AndroidRuntime(10155): java.lang.NullPointerException
03-14 15:02:11.053: E/AndroidRuntime(10155): at com.videotrafico.MainActivity$DownloadCAMARAS.onPostExecute(MainActivity.java:515)
03-14 15:02:11.053: E/AndroidRuntime(10155): at com.videotrafico.MainActivity$DownloadCAMARAS.onPostExecute(MainActivity.java:1)
03-14 15:02:11.053: E/AndroidRuntime(10155): at android.os.AsyncTask.finish(AsyncTask.java:631)
03-14 15:02:11.053: E/AndroidRuntime(10155): at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-14 15:02:11.053: E/AndroidRuntime(10155): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
03-14 15:02:11.053: E/AndroidRuntime(10155): at android.os.Handler.dispatchMessage(Handler.java:99)
03-14 15:02:11.053: E/AndroidRuntime(10155): at android.os.Looper.loop(Looper.java:137)
03-14 15:02:11.053: E/AndroidRuntime(10155): at android.app.ActivityThread.main(ActivityThread.java:5227)
03-14 15:02:11.053: E/AndroidRuntime(10155): at java.lang.reflect.Method.invokeNative(Native Method)
03-14 15:02:11.053: E/AndroidRuntime(10155): at java.lang.reflect.Method.invoke(Method.java:511)
03-14 15:02:11.053: E/AndroidRuntime(10155): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
03-14 15:02:11.053: E/AndroidRuntime(10155): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
03-14 15:02:11.053: E/AndroidRuntime(10155): at dalvik.system.NativeStart.main(Native Method)
我看到了网页的输出,还可以
这是我的代码:
public class DownloadCAMARAS extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progressdialog
mProgressDialog = new ProgressDialog(MainActivity.this);
// Set progressdialog message
mProgressDialog.setMessage("Cargando cámaras, esto puede tomar hasta 20 segundos dependiendo de su conexión.");
mProgressDialog.setIndeterminate(false);
// Show progressdialog
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// Create an array
arraylist = new ArrayList<HashMap<String, String>>();
// Retrieve JSON Objects from the given URL address
jsonobject = JSONfunctions
.getJSONfromURL("http://www.videotrafico.com/api/camaras.php");
try {
// Locate the array name in JSON
jsonarray = jsonobject.getJSONArray("datos");
for (int i = 0; i < jsonarray.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
jsonobject = jsonarray.getJSONObject(i);
// Retrive JSON Objects
map.put("imagen", jsonobject.getString("imagen"));
map.put("nombrecam", jsonobject.getString("nombrecam"));
map.put("enlace", jsonobject.getString("enlace"));
arraylist.add(map);
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args) {
gridview = (GridView) findViewById(R.id.gridcams);
adapter2 = new ListViewAdapter2(MainActivity.this, arraylist);
// Set the adapter to the ListView
gridview.setAdapter(adapter2);
// Close the progressdialog
mProgressDialog.dismiss();
}
}
您的第二个问题是:
gridview = (GridView) findViewById(R.id.gridcams);
返回的视图findViewById(R.id.gridcams)
似乎是GridLayout
而不是GridView
==>ClassCastException
解决方案:将id为
R.id.gridcams
的视图更改为布局中的GridView,以便findViewById返回GridView。第515行是:GridView.setAdapter(adapter2);这是onPostExecute中的一些内容,当您试图在gridView上设置适配器时,它可能是空的。或者您的progressDialog为空,您正在尝试取消它。是的,谢谢是布局,但现在我有另一个问题:P我已更新了OP。请检查它。您正在尝试将GridLayout强制转换为GridView。将活动中的GridView更改为GridLayout,或将R.id.gridcams xml中的GridLayout更改为GridView。
gridview = (GridView) findViewById(R.id.gridcams);