当互联网不可用时,异步任务会使android上的应用程序崩溃
在我的android应用程序中,我使用了一个异步任务来处理我的互联网请求。我通过使用实现了这一点,这使得进行互联网请求变得很容易。我的try/catch语句中有很多代码,但它们在出现未处理的异常时不会触发,所以应用程序会崩溃。只有当互联网断开连接或在某些地区速度较慢时,才会发生这种情况 我找过类似的帖子,但发现有相同问题的人没有尝试/捕捉,所以没有处理异常 我也试着做一个检查,检查互联网的可访问性,但效果不太好,因为我更愿意用干净的尝试捕捉当互联网不可用时,异步任务会使android上的应用程序崩溃,android,android-asynctask,nullpointerexception,okhttp,Android,Android Asynctask,Nullpointerexception,Okhttp,在我的android应用程序中,我使用了一个异步任务来处理我的互联网请求。我通过使用实现了这一点,这使得进行互联网请求变得很容易。我的try/catch语句中有很多代码,但它们在出现未处理的异常时不会触发,所以应用程序会崩溃。只有当互联网断开连接或在某些地区速度较慢时,才会发生这种情况 我找过类似的帖子,但发现有相同问题的人没有尝试/捕捉,所以没有处理异常 我也试着做一个检查,检查互联网的可访问性,但效果不太好,因为我更愿意用干净的尝试捕捉 private class prenesi exten
private class prenesi extends AsyncTask<String, Void, String>
{
String odgovor = null;
protected String doInBackground(String... params)
{
OkHttpClient client = new OkHttpClient();
RequestBody vsebina = new FormEncodingBuilder()
.add("kraj", params[0])
.build();
Request request = new Request.Builder()
.url("http://mypage.com/login.php")
.post(vsebina)
.build();
Response response = null;
try
{
response = client.newCall(request).execute();
}
catch (IOException e)
{
e.printStackTrace();
}
if (!response.isSuccessful())
{
odgovor = "Napaka.";
}
else
try
{
odgovor = response.body().string();
}
catch (IOException e)
{
e.printStackTrace();
}
return odgovor;
}
}
私有类prenesi扩展异步任务
{
字符串odgovor=null;
受保护的字符串doInBackground(字符串…参数)
{
OkHttpClient=新的OkHttpClient();
RequestBody vsebina=新FormEncodingBuilder()
.add(“kraj”,参数[0])
.build();
Request Request=newrequest.Builder()
.url(“http://mypage.com/login.php")
.post(vsebina)
.build();
响应=空;
尝试
{
response=client.newCall(request.execute();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
如果(!response.issusccessful())
{
odgovor=“纳帕卡。”;
}
其他的
尝试
{
odgovor=response.body().string();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
返回odgovor;
}
}
devconsole说问题出在doInBackground()中,我想这是因为null指针异常引起的,尽管我不完全确定这意味着什么:
java.lang.RuntimeException:执行doInBackground()时出错
在android.os.AsyncTask$3.done(AsyncTask.java:299)
位于java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:124)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
位于java.util.concurrent.FutureTask.run(FutureTask.java:137)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
运行(Thread.java:856)
原因:java.lang.NullPointerException
谁能给我指一下那个瑕疵吗。我受够了。
非常感谢您的帮助,希望能尽快解决这个问题。
感谢您的贡献。您似乎忘记了初始化
字符串的值。首先设置String odgovor=“”
而不是字符串odgovor=null代码>
尝试将代码修改为此
String odgovor="";
try{
response = client.newCall(request).execute();
if (!response.isSuccessful()) {
odgovor = "Napaka.";
} else{
odgovor = response.body().string();
}} catch (IOException e) {
e.printStackTrace();
}
似乎最终的问题在于isSuccessul方法,这有点俗气,idk why,但我使用if(response==null)代替它。尝试使用调试器,看看应用程序崩溃的地方。或者,您可以尝试使用日志检查崩溃点。该函数的作用是什么response=client.newCall(request.execute()代码>它向web发出请求。这是试着抓住的。