OkHttp在Android中用于发出网络请求

2022-09-03 05:54:55

我想做什么

我正在尝试学习使用Okhttp在Android中进行网络调用


我做了什么


我的代码::

主要活动.java

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.internal.http.Request;
import com.squareup.okhttp.internal.http.Response;
    public class MainActivity extends Activity {

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

             Request request = new Request.Builder()
                .url("https://raw.github.com/square/okhttp/master/README.md")
                .build();

            Response response = client.execute(request);

            Log.d("ANSWER", response.body().string());

        }

    }

我面临的错误::

在行中,我得到错误为:Response response = client.execute(request);

客户端无法解析为变量

如何解决这个问题!


{更新}

public class MainActivity extends Activity {

    OkHttpClient client = new OkHttpClient();


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

         Request request = new Request.Builder()
            .url("https://raw.github.com/square/okhttp/master/README.md")
            .build();

        Response response = client.execute(request);

        Log.d("ANSWER", response.body().string());

    }

}

现在我面对错误是:

在行中作为Response response = client.execute(request);The method execute(Request) is undefined for the type OkHttpClient


答案 1

方法 execute(Request) 未针对类型 OkHttpClient 定义

您会收到此异常,因为没有这样的方法,即。为。相反,它是在使用对象获取的对象上调用的,如下所示:execute(RequestOkHttpClientCallOkHttpClient

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

我认为你应该使用

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

而不是Response response = client.execute(request);

OkHttp docs

OkHttp Blog


答案 2

我认为你应该使用okHttp的新2.0 RC。

要提出POST请愿书,最好的是:

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

推荐