在我的Android应用程序中,我使用了异步任务来处理我的互联网请求。我通过使用okhttp library实现了这一点,这使得轻松发出互联网请求。我有很多代码包围了我的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;
}
}
devconsole说问题出现在doInBackground()中,我猜它是因为空指针异常引起的,虽然我不完全确定这意味着什么:
java.lang.RuntimeException:执行doInBackground()时发生错误 在android.os.AsyncTask $ 3.done(AsyncTask.java:299) at java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:273) at java.util.concurrent.FutureTask.setException(FutureTask.java:124) at 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) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569) 在java.lang.Thread.run(Thread.java:856) 引起:java.lang.NullPointerException
请有人指出我的缺陷。我坚持这个。 所有的帮助将非常感谢,希望尽快解决这个问题。 感谢您的贡献。
答案 0 :(得分:0)
您似乎忘记初始化String
值。首先设置String odgovor="";
而不是String 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();
}
答案 1 :(得分:0)
似乎问题到底是用isSuccessul方法,这有点俗气,idk为什么,但是我使用if而不是它(response == null)。