请求(okhttp3.Request.Builder)在 okhttp3.Request 中具有私有访问权限
Request(okhttp3.Request.Builder) has private access in okhttp3.Request
我只想使用 okhttp 下载一些字节数据,但是在我完成代码之前,我 运行 遇到了一个问题 android studio 报告了一个错误 "Request(okhttp3.Request.Builder) has private access in okhttp3.Request",我的代码出现问题,我该如何解决?
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public byte[] getUrlBytes(String urlSpec) throws IOException{
URL url = new URL(urlSpec);
OkHttpClient client = new OkHttpClient();
try {
Request request = new Request().Builder
.url(url)
.build();
Response response = client.newCall(request).execute();
} finally {
}
这只是我的一些代码,我只是按照 http://square.github.io/okhttp/ 上的示例进行操作,我没有看到任何区别,但它只是报告此错误
您应该尝试使用排队而不是执行。 Execute 同步运行请求,这可能会导致阻塞主线程的问题。 Enqueue 会让你以异步的方式做事,你可以在回调中处理成功和失败的响应。做这样的事情:
pivate String mStringUrl = "http://www.yoururl.com";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(mStringUrl)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//do failure stuff
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//do success stuff
}
}
在你的代码中看起来像
Request request = new Request().Builder
.url(url)
.build();
您正在尝试调用 Request
的私有构造方法。您必须通过调用 public 静态方法来实例化一个新的 Request.Builder()
。使用这种类型的模式,在调用最后的 .build();
行之前,您不会随请求一起返回。
参考:OkHttp3 Request.Builder documentation
只需替换为此代码即可。
Request request = new Request.Builder()
.url(url)
.build();
编辑:
还要注意调用client.newCall(request).execute()
方法会同步执行,如果在主线程执行可能会导致线程问题。
我只想使用 okhttp 下载一些字节数据,但是在我完成代码之前,我 运行 遇到了一个问题 android studio 报告了一个错误 "Request(okhttp3.Request.Builder) has private access in okhttp3.Request",我的代码出现问题,我该如何解决?
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public byte[] getUrlBytes(String urlSpec) throws IOException{
URL url = new URL(urlSpec);
OkHttpClient client = new OkHttpClient();
try {
Request request = new Request().Builder
.url(url)
.build();
Response response = client.newCall(request).execute();
} finally {
}
这只是我的一些代码,我只是按照 http://square.github.io/okhttp/ 上的示例进行操作,我没有看到任何区别,但它只是报告此错误
您应该尝试使用排队而不是执行。 Execute 同步运行请求,这可能会导致阻塞主线程的问题。 Enqueue 会让你以异步的方式做事,你可以在回调中处理成功和失败的响应。做这样的事情:
pivate String mStringUrl = "http://www.yoururl.com";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(mStringUrl)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//do failure stuff
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//do success stuff
}
}
在你的代码中看起来像
Request request = new Request().Builder
.url(url)
.build();
您正在尝试调用 Request
的私有构造方法。您必须通过调用 public 静态方法来实例化一个新的 Request.Builder()
。使用这种类型的模式,在调用最后的 .build();
行之前,您不会随请求一起返回。
参考:OkHttp3 Request.Builder documentation
只需替换为此代码即可。
Request request = new Request.Builder()
.url(url)
.build();
编辑:
还要注意调用client.newCall(request).execute()
方法会同步执行,如果在主线程执行可能会导致线程问题。