Android 请求(okhttp3.Request.Builder)在okhttp3.Request中具有私有访问权限
我只是想用okhttp下载一些字节数据,但是在我完成代码之前,我遇到了一个问题,android studio报告了一个错误,说“请求(okhttp3.Request.Builder)在okhttp3.Request中有私有访问权”,我的代码被吼叫,我如何修复这个问题Android 请求(okhttp3.Request.Builder)在okhttp3.Request中具有私有访问权限,android,okhttp3,Android,Okhttp3,我只是想用okhttp下载一些字节数据,但是在我完成代码之前,我遇到了一个问题,android studio报告了一个错误,说“请求(okhttp3.Request.Builder)在okhttp3.Request中有私有访问权”,我的代码被吼叫,我如何修复这个问题 import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public byte[] getUrlBytes(String urlS
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 {
}
这只是我的一些代码,我只是按照上面的示例,我看不出有什么区别,但它只是报告了这个错误您应该尝试使用排队而不是执行。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.Builder()
。使用这种类型的模式,直到最后的.build()调用代码>行
参考:
只要用这段代码替换就可以了
Request request = new Request.Builder()
.url(url)
.build();
编辑:
还要注意,调用client.newCall(request).execute()方法将同步执行,如果在主线程上执行,可能会导致线程问题。不要在注释中拆分答案。你可以编辑这篇文章。我想我会把它作为一条评论添加,因为它与问题没有直接关系,如果OP已经用这种方式处理它,那是多余的。这没关系,但作为注释添加会更有效,OP会立即看到这一点。