Utilisez OkHttp3 pour faire des requêtes GET et POST.
MainActivity
MainActivity.java
package com.example.sampleapplication.sample.okhttp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Obtenir le bouton GET et le bouton POST
Button getButton = findViewById(R.id.getButton);
Button postButton = findViewById(R.id.postButton);
//Lorsque le bouton GET est appuyé
getButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OkHttpGet getTask = new OkHttpGet();
getTask.execute();
}
});
//Lorsque le bouton POST est enfoncé
postButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OkHttpPost postTask = new OkHttpPost();
postTask.execute();
}
});
}
}
Cette fois, j'ai créé des classes séparées pour Get et Post, et je les ai appelées. Chaque get.Task.execute(); postTask.execute(); Appelle avec.
GET
OkHttpGet.java
package com.example.sampleapplication.sample.okhttp;
import android.os.AsyncTask;
import android.util.Log;
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpGet extends AsyncTask<String,String,String> {
@Override
protected String doInBackground(String... strings) {
// url
String url = "GET point de terminaison de la demande";
//Données de réponse
String strData = "";
//Instanciation OkHttp
OkHttpClient client = new OkHttpClient();
//Demande de build avec URL
Request request = new Request.Builder()
.url(url)
.get()
.build();
try {
//Exécution de la demande
Response response = client.newCall(request).execute();
//Obtenir des données du corps de la réponse
strData = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return strData;
}
@Override
protected void onPostExecute(String str) {
Log.d("Debug",str);
}
}
Cette fois, j'ai défini l'URL en incluant la requête dans l'URL. Il semble que le traitement fastidieux ne puisse pas être exécuté dans le thread principal, donc AsyncTask est utilisé pour le traitement asynchrone. Faites un processus chronophage (ici, une requête utilisant OkHttp) dans doInBackground, et quand c'est fait On a l'impression que le processus passe à onPostExecute. onPostExecute renvoie le résultat du traitement asynchrone effectué par doInBackground au thread principal. Donc, si vous souhaitez afficher le résultat de la demande à l'écran, vous pouvez le faire ici. Peut-être.
POST
OkHttpPost.java
package com.example.sampleapplication.sample.okhttp;
import android.os.AsyncTask;
import android.util.Log;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkHttpPost extends AsyncTask<String,String,String> {
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
String json = "{\"name\":\"Nom\", \"taxis\":\"Classification\"}";
@Override
protected String doInBackground(String... strings) {
OkHttpClient client = new OkHttpClient();
String url = "URL utilisée pour POST";
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String str) {
Log.d("Debug",str);
}
}
Je passe des données au format json par POST. A part ça, c'est la même chose que GET.
Recommended Posts