Java android中用于发出网络请求的OkHttp

Java android中用于发出网络请求的OkHttp,java,android,okhttp,Java,Android,Okhttp,我正在尝试做的事情: 我正在努力学习在android系统中打网络电话的用法 我所做的: 我看过他们的文件 我已经下载并在项目中添加了JAR 我正在使用他们的示例代码 MyCode: MainActivity.java import android.app.Activity; import android.os.Bundle; import android.util.Log; import com.squareup.okhttp.OkHttpClient; import com.squar

我正在尝试做的事情

我正在努力学习在android系统中打网络电话的用法


我所做的

  • 我看过他们的文件
  • 我已经下载并在项目中添加了JAR
  • 我正在使用他们的示例代码

MyCode

MainActivity.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(请求)行中
我得到的错误如下:

客户端无法解析为变量

如何解决这个问题


{Update} 现在我面临的错误是:

Response-Response=client.execute(请求)行中
as
类型OkHttpClient未定义方法execute(Request)


你漏了这一行


OkHttpClient=new-OkHttpClient()

您需要像这样声明客户机变量:

OkHttpClient client = new OkHttpClient();
您还应该使用一些线程或异步任务来使用您的请求


您可以在这个链接中阅读关于Android上AsyncTask的其他内容:

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

要提交请愿书,最好的方法是:

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();
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
新建异步任务(){
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
试一试{
client=new-OkHttpClient();
s=员额(”https://raw.github.com/square/okhttp/master/README.md","");
}捕获(例外e){
//TODO:处理异常
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
Log.e(“答案”和“+s”);
}
}.execute();
}
OkHttpClient类型的方法execute(Request)未定义

您之所以获得此异常,是因为对于
OkHttpClient
,没有这样的方法,即执行(请求
)。而是在使用
OkHttpClient
对象获得的
Call
对象上调用它,如下所示:

  Call call = client.newCall(request);
  Response response = call.execute();
我认为你应该使用

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

您只需更换: 这个:

Response response = client.execute(request);
作者:

Response response = client.execute(request);

像这样使用

是否尝试在清单文件中添加internet权限

<uses-permission android:name="android.permission.INTERNET" />


我尝试了线程和异步任务,但在更新中显示的错误仍然存在。。。。我还遗漏了什么吗?
master
上的代码与最新版本不一致。@jake Wharton。。。。我不明白。。。。你能给我指出一个有效的代码吗(或者在我的代码上贴出更改作为答案)。。。。。我试着去寻找例子,但是我找不到太多的可用资源,谢谢,她说主分支与1.5.4版本不一样。检查GET请求的1.5.4示例。注意:我用一个简单的
gradle clean--refresh dependencies
修复了一个类似的问题。
@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;        
}
<uses-permission android:name="android.permission.INTERNET" />