I use OkHttp and everything works fine, however I wanted to take into account the case when the DNS resolution is off, the server is off, slow or just returns something other than HTTP Status Code 200. I tried to use Toast, but I canβt, as it is done in another thread (?). How to overcome this obstacle and give the user a better experience? Here is my code:
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(); } }); }
Here's the accident:
FATAL EXCEPTION: OkHttp Dispatcher java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Naphtali gilead
source share