Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何提醒使用Toast的用户OkHttp请求返回的不是200?_Android_Okhttp_Android Toast - Fatal编程技术网

Android 如何提醒使用Toast的用户OkHttp请求返回的不是200?

Android 如何提醒使用Toast的用户OkHttp请求返回的不是200?,android,okhttp,android-toast,Android,Okhttp,Android Toast,我使用的是OkHttp,一切正常,但是,我想考虑一下DNS解析关闭、服务器停机、速度慢或只是返回HTTP状态码200以外的内容的情况。 我尝试过使用Toast,但我不能,因为这是在另一个线程(?)上完成的。 我如何克服这个障碍,给用户更好的体验? 这是我的密码: private void getBinary(String text) throws Exception { OkHttpClient client = new OkHttpClient(); String body

我使用的是OkHttp,一切正常,但是,我想考虑一下DNS解析关闭、服务器停机、速度慢或只是返回HTTP状态码200以外的内容的情况。 我尝试过使用Toast,但我不能,因为这是在另一个线程(?)上完成的。 我如何克服这个障碍,给用户更好的体验? 这是我的密码:

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();
        }
    });
}
下面是崩溃:


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

这样的代码适用于您的:

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();
            }
        });
    }
}

确保没有从主Ui线程调用
getBinary
方法?
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();
            }
        });
    }
}