Android Studio-从URL致命异常中提取JSON

问题描述 投票:0回答:1

所以我在使此代码正常工作时遇到了一些问题,我在网上找到了部分代码,但无法正常工作。我曾尝试调整一些代码,但是无论我在做什么,该应用程序都会因错误而崩溃。经过数小时的谷歌搜索和观看YouTube教程,我一直在尝试使它工作几天,但似乎无法使它正常工作。

有人可以告诉我我在这里做错了什么吗?

CODE:

public class fetchJSON extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {

        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;

        URL url;
        try {
            url = new URL("www.link.to.json");
            urlConnection.setRequestMethod("GET"); //Your method here
            urlConnection.connect();

            InputStream inputStream = urlConnection.getInputStream();
            StringBuffer buffer = new StringBuffer();
            if (inputStream == null) {
                return null;
            }
            reader = new BufferedReader(new InputStreamReader(inputStream));

            String line;
            while ((line = reader.readLine()) != null)
                buffer.append(line + "\n");

            if (buffer.length() == 0)
                return null;

            return buffer.toString();
        } catch (IOException e) {
            Log.e(TAG, "IO Exception", e);
            return null;
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (final IOException e) {
                    Log.e(TAG, "Error closing stream", e);
                }
            }
        }
    }

    @Override
    protected void onPostExecute(String response) {
        if(response != null) {
            JSONObject json = null;
            try {
                json = new JSONObject(response);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            JSONObject jsonResponse = null;
            try {
                jsonResponse = json.getJSONObject("Question1");
            } catch (JSONException e) {
                e.printStackTrace();
            }
            MainActivity.jsonPrint.setText((CharSequence) jsonResponse);
        }
    }
}

错误:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: uk.co.jrtevents.fetchjsonfromurltest, PID: 4019
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:318)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
     Caused by: java.lang.NullPointerException: Attempt to invoke a virtual method on a null object reference
        at uk.co.jrtevents.fetchjsonfromurltest.fetchJSON.doInBackground(fetchJSON.java:31)
        at uk.co.jrtevents.fetchjsonfromurltest.fetchJSON.doInBackground(fetchJSON.java:18)
        at android.os.AsyncTask$2.call(AsyncTask.java:304)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)

LINE 31:urlConnection.setRequestMethod("GET");

java android android-asynctask
1个回答
0
投票
HttpURLConnection urlConnection = null;

您从未为urlConnection分配值,因此它是null

您需要添加:

urlConnection = url.openConnection();

尝试使用urlConnection之前。

URLHttpURLConnection已经很老了,几乎没有开发人员使用它们了。使用更现代的HTTP客户端API(例如OkHttp)可能会更好。

© www.soinside.com 2019 - 2024. All rights reserved.