java - 应用程序在 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);
}
}
}
为长篇道歉。谢谢。
解决方案
应用程序崩溃是因为 API 没有返回任何内容,因为您没有指定API KEY
文档说
https://openweathermap.org/faq#error401,https://openweathermap.org/appid
推荐阅读
- regex - 通过派生规则查找正则表达式的语言
- x86-64 - 4KB 页面大小的 48 位系统中的虚拟页号有多长
- r - 等到值改变进行计算
- c - 当我输入第一个站的输入时,它最接近它打印最小值为 0 而不是 1 为什么会发生这种情况?所有其他事情都正常工作
- mongodb - 使用 mongo 的 UserUpdate 获取公会 ID
- node.js - Amazon S3 在使用 generatePresignedPutUrl 时返回拒绝访问
- powershell - Powershell - 移动文件夹过滤子文件夹
- powerbi - PowerBI 在“K”和“M”中转换
- python - 如何将列表与不均匀的列表进行比较
- node.js - DAPR 与 AWS EKS、S3