Ce que j'essaie de faire ::
J'essaie d'apprendre l'utilisation de Okhttp pour passer des appels en réseau sous Android
Ce que j'ai fait::
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());
}
}
Erreur je suis face à ::
Dans la ligne Response response = client.execute(request);
Je reçois une erreur en tant que:
le client ne peut pas résoudre une variable
Comment résoudre ce problème!
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());
}
}
Maintenant, je fais face à l'erreur en tant que:
dans la ligne
Response response = client.execute(request);
commeThe method execute(Request) is undefined for the type OkHttpClient
La méthode execute (Request) n'est pas définie pour le type OkHttpClient.
Vous obtenez cette exception car il n'existe pas de méthode de ce type, par exemple .execute(Request
) pour OkHttpClient
. Il est plutôt appelé sur un objet Call
qui est obtenu à l'aide de l'objet OkHttpClient
comme suit:
Call call = client.newCall(request);
Response response = call.execute();
Je pense que vous devriez utiliser
Response response = client.newCall(request).execute();
au lieu de Response response = client.execute(request);
Je pense que vous devriez utiliser la nouvelle version 2.0 RC d’okHttp.
Pour faire une pétition POST, le mieux est:
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();
}
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;
}
utiliser comme ça!
Essayez d'ajouter des autorisations Internet dans votre fichier manifeste?
<uses-permission Android:name="Android.permission.INTERNET" />
Il vous suffit de remplacer: This:
Response response = client.execute(request);
Par:
Response response = client.newCall(request).execute();
Vous devez déclarer une variable client comme ceci:
OkHttpClient client = new OkHttpClient();
Aussi, vous devriez utiliser votre demande en utilisant un thread ou AsyncTask!
Vous pouvez lire autre chose sur AsyncTask sur Android dans ce lien: http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/