Android Studio - 从 URL 获取 JSON 致命异常

Android Studio - Fetching JSON from URL FATAL EXCEPTION

所以我在使这段代码起作用时遇到了一些问题,我在网上找到了一些这段代码,但它不起作用。我尝试调整一些代码,但无论我在做什么,应用程序都会因错误而崩溃。几天来,我一直在尝试通过谷歌搜索和观看 YouTube 教程来让它工作,但我似乎无法让它工作。

有人可以阐明我在这里做错了什么吗?

代码:

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.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.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.call(AsyncTask.java:304)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)

第 31 行: urlConnection.setRequestMethod("GET");

HttpURLConnection urlConnection = null;

您永远不会为 urlConnection 赋值,所以它是 null

您需要添加:

urlConnection = url.openConnection();

在尝试使用 urlConnection 之前。

URLHttpURLConnection 非常 古老,很少有开发人员再使用它们。使用更现代的 HTTP 客户端 API 可能会更好,例如 OkHttp.