java – Android Okhttp异步调用

前端之家收集整理的这篇文章主要介绍了java – Android Okhttp异步调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用Okhttp库通过API将我的 Android应用程序连接到我的服务器.

我的api调用是在按钮单击时发生的,我收到以下android.os.NetworkOnMainThreadException.我明白这是因为我在主线程上尝试网络调用,但我也在努力找到一个关于如何使这个代码使用另一个线程(异步调用)的android的干净解决方案.

@Override
public void onClick(View v) {
    switch (v.getId()){
        //if login button is clicked
        case R.id.btLogin:
            try {
                String getResponse = doGetRequest("http://myurl/api/");
            } catch (IOException e) {
                e.printStackTrace();
            }
            break;
    }
}

String doGetRequest(String url) throws IOException{
    Request request = new Request.Builder()
            .url(url)
            .build();

    Response response = client.newCall(request).execute();
    return response.body().string();

}

上面是我的代码,异常正在抛出

Response response = client.newCall(request).execute();

我也读过Okhhtp支持异步请求,但我真的找不到一个干净的android解决方案,因为大多数似乎使用一个新的类使用AsyncTask<> ??

任何帮助或建议都非常感谢,谢谢…

解决方法

要发送异步请求,请使用以下命令:
void doGetRequest(String url) throws IOException{
    Request request = new Request.Builder()
            .url(url)
            .build();

    client.newCall(request)
            .enqueue(new Callback() {
                @Override
                public void onFailure(final Call call,IOException e) {
                    // Error

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // For the example,you can show an error dialog or a toast
                            // on the main UI thread
                        }
                    });
                }

                @Override
                public void onResponse(Call call,final Response response) throws IOException {
                    String res = response.body().string();

                    // Do something with the response
                }
            });
}

&安培;这样称呼它:

case R.id.btLogin:
    try {
        doGetRequest("http://myurl/api/");
    } catch (IOException e) {
        e.printStackTrace();
    }
    break;

猜你在找的Android相关文章