当前位置: 首页 > 知识库问答 >
问题:

致命异常:AsyncTask#1:java。lang.RuntimeException:执行doInBackground()时出错

邓阳伯
2023-03-14

我在android设备上构建代码时出错。这是错误报告

致命异常:AsyncTask#1进程:com。实例冈图,PID:1248爪哇。lang.RuntimeException:在android上执行doInBackground()时出错。操作系统。异步任务3美元。在java上完成(AsyncTask.java:304)。util。同时发生的未来任务。在java完成(FutureTask.java:355)。util。同时发生的未来任务。java上的setException(FutureTask.java:222)。util。同时发生的未来任务。在android上运行(FutureTask.java:242)。操作系统。AsyncTask$SerialExecutor$1。在java上运行(AsyncTask.java:231)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1112)。util。同时发生的ThreadPoolExecutor$工作者。在java上运行(ThreadPoolExecutor.java:587)。lang.Thread。运行(Thread.java:818)由:java引起。lang.NullPointerException:尝试调用虚拟方法“org”。json。JSONArray组织。json。JSONObject。com上的空对象引用上的getJSONArray(java.lang.String)“”。实例冈图。列出$DownloadJSON。com上的doInBackground(List.java:74)。实例冈图。列出$DownloadJSON。android上的doInBackground(List.java:49)。操作系统。异步任务2美元。在java上调用(AsyncTask.java:292)。util。同时发生的未来任务。在android上运行(FutureTask.java:237)。操作系统。AsyncTask$SerialExecutor$1。运行(AsyncTask.java:231)

这是我的密码

 private class DownloadJSON extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(List.this);
        // Set progressdialog title
        mProgressDialog.setTitle("Android JSON Parse Tutorial");
        // Set progressdialog message
        mProgressDialog.setMessage("Loading...");
        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 = JSONFunction
                .getJSONfromURL("http://localhost/atm_db/json/json.php");
        try {
            // Locate the array name in JSON
            jsonarray = jsonobject.getJSONArray("");

            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("nama_atm", jsonobject.getString("nama_atm"));
                map.put("alamat", jsonobject.getString("alamat"));
                map.put("latitude", jsonobject.getString("latitude"));
                map.put("longtitude", jsonobject.getString("longtitude"));
                // Set the JSON Objects into the array
                arraylist.add(map);
            }
        } catch (JSONException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

共有2个答案

翟棋
2023-03-14

用以下代码替换DownloadJSON:

    public class DownloadJSON extends AsyncTask<String ,Integer , JSONObject> {

    DownloadJSON(){
        // Create an array
        arraylist = new ArrayList<HashMap<String, String>>();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(List.this);
        // Set progressdialog title
        mProgressDialog.setTitle("Android JSON Parse Tutorial");
        // Set progressdialog message
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        // Show progressdialog
        mProgressDialog.show();
    }

    @Override
    protected JSONObject doInBackground(String... params) {
        // Retrieve JSON Objects from the given URL address
        jsonobject = JSONFunction.getJSONfromURL("http://localhost/atm_db/json/json.php");
        return jsonobject;
    }

    @Override
    protected void onPostExecute(JSONObject s) {
        super.onPostExecute(s);
        try {
            // Locate the array name in JSON
            jsonarray = jsonobject.getJSONArray("PUT KEY OF JSON HERE");

            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("nama_atm", jsonobject.getString("nama_atm"));
                map.put("alamat", jsonobject.getString("alamat"));
                map.put("latitude", jsonobject.getString("latitude"));
                map.put("longtitude", jsonobject.getString("longtitude"));
                // Set the JSON Objects into the array
                arraylist.add(map);
            }
        } catch (JSONException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
    }


    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }
}

注:

1.在从doInbackground()返回jsonObject之前,请确保您从您提到的URL接收到有效的jsonObject。

2.从jsonobject获取jsonArray时,请使用数组的键。

宓博实
2023-03-14

看起来jsonobject.getJSONArray("");正在抛出错误,因为jsonject为null。

您需要再次检查您是否正在获取数据,如果是,还需要检查JSON数据的格式。

 类似资料: