web-dev-qa-db-fra.com

OkHttp sous Android pour faire des requêtes réseau

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:: 

  • J'ai lu leur documentation ici
  • J'ai téléchargé et ajouté le JAR dans le projet
  • J'utilise leur exemple de code de ici

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!


{Mettre à jour}

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); comme The method execute(Request) is undefined for the type OkHttpClient

16
Devrath

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

OkHttp docs

OkHttp Blog

13
Ritesh Gune

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

}
3
user3801095
@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!

2
Gopi Cg

Essayez d'ajouter des autorisations Internet dans votre fichier manifeste?

<uses-permission Android:name="Android.permission.INTERNET" />
1
Amit Garg

Il vous suffit de remplacer: This:

Response response = client.execute(request);

Par:

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

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/

0
deleon