当互联网不可用时,异步任务会使android上的应用程序崩溃

当互联网不可用时,异步任务会使android上的应用程序崩溃,android,android-asynctask,nullpointerexception,okhttp,Android,Android Asynctask,Nullpointerexception,Okhttp,在我的android应用程序中,我使用了一个异步任务来处理我的互联网请求。我通过使用实现了这一点,这使得进行互联网请求变得很容易。我的try/catch语句中有很多代码,但它们在出现未处理的异常时不会触发,所以应用程序会崩溃。只有当互联网断开连接或在某些地区速度较慢时,才会发生这种情况 我找过类似的帖子,但发现有相同问题的人没有尝试/捕捉,所以没有处理异常 我也试着做一个检查,检查互联网的可访问性,但效果不太好,因为我更愿意用干净的尝试捕捉 private class prenesi exten

在我的android应用程序中,我使用了一个异步任务来处理我的互联网请求。我通过使用实现了这一点,这使得进行互联网请求变得很容易。我的try/catch语句中有很多代码,但它们在出现未处理的异常时不会触发,所以应用程序会崩溃。只有当互联网断开连接或在某些地区速度较慢时,才会发生这种情况

我找过类似的帖子,但发现有相同问题的人没有尝试/捕捉,所以没有处理异常 我也试着做一个检查,检查互联网的可访问性,但效果不太好,因为我更愿意用干净的尝试捕捉

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发出请求。这是试着抓住的。