Android 请求(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

我只是想用okhttp下载一些字节数据,但是在我完成代码之前,我遇到了一个问题,android studio报告了一个错误,说“请求(okhttp3.Request.Builder)在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 {

    }

这只是我的一些代码,我只是按照上面的示例,我看不出有什么区别,但它只是报告了这个错误

您应该尝试使用排队而不是执行。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会立即看到这一点。