okhttpclient newcall new example java android okhttp

java - newcall - OkHttp en Android para hacer solicitudes de red



okhttpclient client new okhttpclient(); (8)

Lo que estoy tratando de hacer ::

Estoy tratando de aprender el uso de Okhttp para hacer llamadas de red en Android

Lo que he hecho ::

  • He leído su documentación Okhttp
  • He descargado y agregado el JAR en el proyecto.
  • Estoy usando su código de muestra de here

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()); } }

Error que estoy enfrentando ::

En la línea Response response = client.execute(request); Estoy recibiendo error como:

el cliente no puede resolver una variable

¡Cómo resolver esto!

{Actualizar}

public class MainActivity extends Activity { OkHttpClient client = new OkHttpClient(); @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()); } }

Ahora me enfrento al error como:

en la línea Response response = client.execute(request); como The method execute(Request) is undefined for the type OkHttpClient


El método de ejecución (Solicitud) no está definido para el tipo OkHttpClient

Está recibiendo esta excepción porque no existe tal método, es decir. execute(Request ) para OkHttpClient . Más bien, se invoca en el objeto de Call que se obtiene utilizando el objeto OkHttpClient siguiente manera:

Call call = client.newCall(request); Response response = call.execute();

Creo que deberías estar usando

Response response = client.newCall(request).execute();

En lugar de Response response = client.execute(request);

Okhttp

OkHttp Blog


Creo que deberías usar el nuevo 2.0 RC de okHttp.

Para hacer una petición POST, lo mejor es:

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(); }


Intenta agregar permisos de internet en tu archivo de manifiesto?

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



Solo necesitas reemplazar: Este:

Response response = client.execute(request);

Por:

Response response = client.newCall(request).execute();


te estás perdiendo esta línea

OkHttpClient client = new OkHttpClient();


protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new AsyncTask<String, Integer, String> (){ @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub try { client = new OkHttpClient(); s = post("https://raw.github.com/square/okhttp/master/README.md",""); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); Log.e("ANSWER", "" + s); } }.execute(); }


@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; }

utilizar de esta manera!