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);
comoThe 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);
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" />
Necesita declarar variable de cliente como esta:
OkHttpClient client = new OkHttpClient();
También debes usar tu solicitud usando algún hilo o AsyncTask!
Puede leer algo más sobre AsyncTask en Android en este enlace: http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/
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!