如何提醒使用Toast的用户OkHttp请求返回了200以外的内容?

我正在使用OkHttp,一切工作正常,但是,我想考虑的情况下,DNSparsingclosures,服务器closures,速度慢,或只是返回一些HTTP状态代码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(); } }); } 

这是崩溃:

 FATAL EXCEPTION: OkHttp Dispatcher java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

Solutions Collecting From Web of "如何提醒使用Toast的用户OkHttp请求返回了200以外的内容?"

吐司必须显示在主线程上。 您可以使用new Handler(Looper.getMainLooper())从任何后台线程生成主线程处理程序,然后使用它向主线程发布敬酒工作。

这样的代码将适用于您的:

 public static void backgroundThreadShortToast(final Context context, final String msg) { if (context != null && msg != null) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } }); } }