在Android上的OkHttp

1 android okhttp

这是我从PHP服务器获取JSON字符串的代码.

当我运行这个应用程序崩溃,并说有一个错误, Response response = client.newCall(request).execute(); 我做错了什么?

public class MainActivity extends Activity {

    //private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new AsyncTask<Void, Void, String>(){

            @Override
            protected String doInBackground(Void... params) {

                OkHttpClient client = new OkHttpClient();
                Request request = new Request.Builder()
                        .url(url)
                        .build();

                try {
                    Response response = client.newCall(request).execute();
                    Log.d("OkHttp", "doInBackground() called with: " + "params = [" + response.body().string() + "]");
                    return response.body().string();
                } 
                catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute();
    }
}
Run Code Online (Sandbox Code Playgroud)

Aal*_*tel 5

  1. 您不需要将其置于异步任务中,因为您可以使用本身为异步的OKHttp库的回调.

  2. 第二件事是你使用了错误的方法.而不是execute()你应该使用enqueue()哪个回调作为参数,如上所述.

试试这段代码:

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
                  .url(url)
                  .build();
Call call = client.newCall(request);
call.enqueue(new Callback() {

    @Override
    public void onFailure(Call call, IOException e) {

        // Observe reason of failure using
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
            if(response.isSuccessful()){
                // Use response here
            }
            else{
                // Observe error
            }
    }
});
Run Code Online (Sandbox Code Playgroud)