我想将progressdialog添加到okhttp(异步,而不是AsyncTask)
但我收到了这个错误:
错误:无法在未调用的线程内创建处理程序 Looper.prepare()
如何以正确的方式修复它?我想确保这是最好的方法。
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("TAG_response", " brak neta lub polaczenia z serwerem ");
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
progress = ProgressDialog.show(SignUp.this, "dialog title",
"dialog message", true);
try {
Log.d("TAGx", response.body().string());
if (response.isSuccessful()) {
Headers responseHeaders = response.headers();
for (int i = 0, size = responseHeaders.size(); i < size; i++) {
//System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
Log.d("TAG2", responseHeaders.name(i));
Log.d("TAG3", responseHeaders.value(i));
}
Log.d("TAG", response.body().string());
progress.dismiss();
main_activity();
}
else{
progress.dismiss();
alertUserAboutError();
}
}
catch (IOException e){
Log.d("TAG", "error");
}
}
});
答案 0 :(得分:2)
OkHttp在与http调用相同的后台线程上运行onResponse方法。因为您正在进行异步调用,这意味着它不会是Android主线程。
要从onResponse在主线程上运行代码,您可以使用Handler和Runnable:
client.newCall(request).enqueue(new Callback() {
Handler handler = new Handler(SignUp.this.getMainLooper());
@Override
public void onFailure(Call call, IOException e) {
//...
}
@Override
public void onResponse(Call call, Response response) throws IOException {
handler.post(new Runnable() {
@Override
public void run() {
// whatever you want to do on the main thread
}
});
}