Home / Programmazione / Java Android / Richieste HTTP in Android con OkHttp
Mattepuffo

Richieste HTTP in Android con OkHttp

Richieste HTTP in Android con OkHttp

Nelle ultime versioni dell'SDK, sono state fatte pesanti modifiche a tutta la parte che riguarda le richieste HTTP.

Ma, a quanto pare, ancora non si è raggiunta l'efficienza di alcune librerie esterne.

Oggi ne vediamo una, con un esempio easy: OkHttp!

Per usare la libreria, potete scaricare il jar dal sito ufficiale, oppure usare Gradle.

In questo caso aggiungete questa riga nel build.gradle (Module: app):

dependencies {
    ................
    compile 'com.squareup.okhttp3:okhttp:3.5.0'
    ................
}

Poi create una classe per effettuare le richieste GET/POST:

import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
 
public class RestCall {
 
    public static String get(OkHttpClient client, String url) throws IOException {
        Request request = new Request.Builder().url(url).build();
        Response response = client.newCall(request).execute();
        return response.body().string();
    }
 
    public static String post(OkHttpClient client, String url, RequestBody body) throws IOException {
        Request request = new Request.Builder().url(url).post(body).build();
        Response response = client.newCall(request).execute();
        return response.body().string();
    }
}

Due metodi statici, abbastanza semplici.

A questo punto nella nostra Activity:

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.IOException;
import okhttp3.OkHttpClient;
 
public class MainActivity extends AppCompatActivity {
 
    private OkHttpClient client;
    private String response;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        client = new OkHttpClient();
        getContent();
    }
 
    private void getContent() {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                try {
                    response = RestCall.get(client, "http://www.omdbapi.com/?t=batman&y=&plot=short&r=json");
                    Log.d("Response", response);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute();
    }
}

Interroghiamo il servizio OMDB, passando alcuni parametri.

Non ho messo esempi per le richieste POST; ve lo lascio come compito.

La libreria, ovviamente, non è solo questa.

Ha tantissimi altri metodi da usare, che potete trovare nella Javadoc.

Sicuramente una libreria da tenere in considerazione.

Enjoy!