Android如何使用OkHttp从Callback获取响应字符串?

tm-*_*ull 6 java android okhttp

这是我的代码:

    OkHttpClient okHttpClient = new OkHttpClient();

    Request request = new Request.Builder().url("http://publicobject.com/helloworld.txt").build();

    Callback callback = new Callback() {
        @Override
        public void onFailure(Request request, IOException e) {

        }

        @Override
        public void onResponse(Response response) throws IOException {

        }
    };

    okHttpClient.newCall(request).enqueue(callback);

    String responseString;
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我想从变量responseString中的onResponse()方法存储response.body().string()的值,但是我无法访问它.

Mat*_*lfe 6

我认为你想做的是这样的:

public class MyActivity extends Activity implements Callback , View.OnClickListener {


 @Override
 public void onCreate(Bundle savedState) {
   super.onCreate(savedState);
   findViewById(R.id.DoHttp).setOnClickListener(this);
 } 

 @Override
 public void onClick(View v) {
   if (v.getId(() == R.id.DoHttp) {

     OkHttpClient okHttpClient = new OkHttpClient();

     Request request = new Request.Builder().url("http://publicobject.com/helloworld.txt").build();
     okHttpClient.newCall(request).enqueue(this);
   }
 }


 @Override
 public void onFailure(Request request, IOException e) {
  //do something to indicate error
 }

  @Override
  public void onResponse(Response response) throws IOException {
    if (response.isSuccessful()) {
     parse(response.body().string());
    }
  }

  private void parse(String response) {
   //do something with response
  } 
}
Run Code Online (Sandbox Code Playgroud)

在上面的活动中,我们实现了回调,然后当我们创建 okhttp 请求时,我们将我们自己的实例(this)传递给它,这样我们就可以让 oktthp 回调该类,我们可以很容易地完成一个内部类,但是这减少了我们必须创建的类的数量。我使用按钮单击来说明何时进行 Http 调用,但这可能是其他时间,例如它可能在首次创建屏幕时(在 onCreate 中)发生。小心屏幕旋转。此外,这假设回调是在主线程上完成的,我认为这会是,但我并不积极,因为我使用 okttp 的方式与您不同。如果它没有在主线程上返回响应结果,那么您可以调用 runOnUiThread() 并将其传递给一个 Runnable 来执行更新视图的工作。