Używam OkHttp i wszystko działa poprawnie, jednak chciałem, aby wziąć pod uwagę przypadek, w którym uchwała DNS jest wyłączona, serwer jest w dół, powoli, lub po prostu zwraca coś innego niż kod stanu HTTP 200. I "Próbowałem użyć Toast, ale nie mogę, ponieważ jest to zrobione w innym wątku (?). Jak pokonać tę przeszkodę i zapewnić użytkownikowi lepsze wrażenia? Oto mój kod:Jak ostrzec użytkownika za pomocą Toast, że żądanie OkHttp zwróciło coś innego niż 200?
private void getBinary(String text) throws Exception {
OkHttpClient client = new OkHttpClient();
String body = URLEncoder.encode(text, "utf-8");
// Encrypt
MCrypt mcrypt = new MCrypt();
String encrypted = MCrypt.bytesToHex(mcrypt.encrypt(body));
Request request = new Request.Builder()
.url("http://mysite/my_api.php")
.post(RequestBody.create(MediaType.parse("text/plain"), encrypted))
.addHeader("User-Agent", System.getProperty("http.agent"))
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Response response) throws IOException, RuntimeException {
if (response.code() != 200){
Toast.makeText(getSherlockActivity(), "Fail", Toast.LENGTH_LONG).show();
return;
}
saveResponseToFile(response);
}
@Override
public void onFailure(Request arg0, IOException arg1) {
Toast.makeText(getSherlockActivity(), "Bigger fail", Toast.LENGTH_LONG).show();
}
});
}
Oto katastrofa:
FATAL EXCEPTION: OkHttp Dispatcher
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Upewnij niestawienie 'metody getBinary' od głównego Ui wątek? –