OkHttp in android for making network requests

前端 未结 8 1577
北海茫月
北海茫月 2020-12-29 08:18

What I am trying to do::

I am trying to learn the usage of Okhttp for making networking calls in android


What I have done

相关标签:
8条回答
  • 2020-12-29 09:00

    The method execute(Request) is undefined for the type OkHttpClient

    You are getting this exception because there is no such method ie.execute(Request) for OkHttpClient. Rather it is invoked on Call object which is obtained using OkHttpClient object as follows:

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

    I think you should be using

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

    instead of Response response = client.execute(request);

    OkHttp docs

    OkHttp Blog

    0 讨论(0)
  • 2020-12-29 09:00
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        new AsyncTask<String, Integer, String> (){
    
            @Override
            protected String doInBackground(String... params) {
                // TODO Auto-generated method stub
                try {
                    client = new OkHttpClient();
                    s = post("https://raw.github.com/square/okhttp/master/README.md","");
                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
                return null;
            }
    
            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                Log.e("ANSWER", "" + s);
    
            }
        }.execute();
    
    }
    
    0 讨论(0)
  • 2020-12-29 09:02

    I think you should use the new 2.0 RC of okHttp.

    To make a POST petition, the best is :

    String post(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
            .url(url)
            .post(body)
            .build();
        Response response = client.newCall(request).execute();
        return response.body().string();
    }
    
    0 讨论(0)
  • 2020-12-29 09:02

    You only need to replace: This:

    Response response = client.execute(request);
    

    By:

    Response response = client.newCall(request).execute();
    
    0 讨论(0)
  • 2020-12-29 09:12

    you are missing this line

    OkHttpClient client = new OkHttpClient();

    0 讨论(0)
  • 2020-12-29 09:17
    @Override
    protected String doInBackground(String... ulr) {
        Response response = null;
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
        .url(ulr[0])
        .build();
    
        try {
            response = client.newCall(request).execute();
             return response.body().string();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;        
    }
    

    use like this!

    0 讨论(0)
提交回复
热议问题