首页 > 解决方案 > 应用程序在 onPostExecute 方法中分配某些内容时崩溃

问题描述

作为初学者,我正在关注关于andriod studio的JSON Demo(完全相同的代码和相同的版本)的讲座。出于某种原因,每当我在 onPostExecute 方法中添加某些内容时,应用程序就会在模拟器中崩溃。例如,它不会因以下代码而崩溃:

@Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
    }

但是当我添加非常基本的以查看日志中的结果时,它会崩溃,如下所示:

@Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        Log.i("Website Content: ", result);

    }

我不确定这里有什么问题。为了 RAM 内存分配,我尝试重新启动 Android Studio,我的互联网已打开,它在 gradle 控制台中很好地调试,但在 android 监视器中给出了这个:

06-27 19:16:35.201 18116-18157/com.example.rushi.jsondemo V/RenderScript: 0xae53b000 Launching thread(s), CPUs 2
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err: java.io.FileNotFoundException: http://api.openweathermap.org/data/2.5/weather?q=London,uk
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at com.example.rushi.jsondemo.MainActivity$DownloadTask$override.doInBackground(MainActivity.java:44)
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at com.example.rushi.jsondemo.MainActivity$DownloadTask$override.access$dispatch(MainActivity.java)
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at com.example.rushi.jsondemo.MainActivity$DownloadTask.doInBackground(MainActivity.java:0)
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at com.example.rushi.jsondemo.MainActivity$DownloadTask.doInBackground(MainActivity.java:30)
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
06-27 19:16:35.396 18116-19529/com.example.rushi.jsondemo W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
06-27 19:16:35.411 18116-19529/com.example.rushi.jsondemo W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
06-27 19:16:35.411 18116-19529/com.example.rushi.jsondemo W/System.err:     at java.lang.Thread.run(Thread.java:818)
06-27 19:16:35.451 18116-18116/com.example.rushi.jsondemo D/AndroidRuntime: Shutting down VM
06-27 19:16:35.529 18116-18116/com.example.rushi.jsondemo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                            Process: com.example.rushi.jsondemo, PID: 18116
                                                                            java.lang.NullPointerException: println needs a message
                                                                                at android.util.Log.println_native(Native Method)
                                                                                at android.util.Log.i(Log.java:160)
                                                                                at com.example.rushi.jsondemo.MainActivity$DownloadTask$override.onPostExecute(MainActivity.java:74)
                                                                                at com.example.rushi.jsondemo.MainActivity$DownloadTask$override.access$dispatch(MainActivity.java)
                                                                                at com.example.rushi.jsondemo.MainActivity$DownloadTask.onPostExecute(MainActivity.java:0)
                                                                                at com.example.rushi.jsondemo.MainActivity$DownloadTask.onPostExecute(MainActivity.java:30)
                                                                                at android.os.AsyncTask.finish(AsyncTask.java:651)
                                                                                at android.os.AsyncTask.-wrap1(AsyncTask.java)
                                                                                at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                at android.os.Looper.loop(Looper.java:148)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-27 19:19:47.263 18116-18122/com.example.rushi.jsondemo W/art: Suspending all threads took: 7.513ms
06-27 19:21:35.896 18116-18116/com.example.rushi.jsondemo I/Process: Sending signal. PID: 18116 SIG: 9

这是我的完整代码:

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DownloadTask task = new DownloadTask();
        task.execute("http://api.openweathermap.org/data/2.5/weather?q=London,uk");

    }

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

        @Override
        protected String doInBackground(String... urls) {

            String result = "";
            URL url;
            HttpURLConnection urlConnection = null;

            try {
                url = new URL(urls[0]);

                urlConnection = (HttpURLConnection) url.openConnection();

                InputStream in = urlConnection.getInputStream();

                InputStreamReader reader = new InputStreamReader(in);

                int data = reader.read();

                while (data != -1) {

                    char current = (char) data;

                    result += current;

                    data = reader.read();

                }

                return result;

            } catch (MalformedURLException e) {
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Log.i("Website Content: ", result);

        }

    }

}

为长篇道歉。谢谢。

标签: javaandroidjson

解决方案


应用程序崩溃是因为 API 没有返回任何内容,因为您没有指定API KEY文档说 https://openweathermap.org/faq#error401https://openweathermap.org/appid


推荐阅读