Je cherche une solution pour mettre en œuvre une requête JSON-POST avec OKHTTP. J'ai un fichier HTTP-Client.java qui gère toutes les méthodes (POST, GET, PUT, DELETE) et dans l'activité RegisterActivity, je voudrais envoyer au serveur les données de l'utilisateur (provenant des champs de saisie) au format JSON.
C'est mon HTTP-Client.java
public class HttpClient{
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
public static OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url.host(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
})
.build();
public static Call post(String url, String json, Callback callback) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body.create(JSON, json))
.build();
Call call = client.newCall(request);
call.enqueue(callback);
return call;
}
}
... et voici la partie onClick de l'application Enregistrer une activité
btnRegRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
String registerData = "{\"email\":\"" + etRegisterEmail.getText().toString() + "\",\"password\":\"" + etRegisterPasswort.getText().toString() + "\"}";
try {
HttpClient.post(ABSOLUTE_URL, registerData, new Callback(){
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String resp = response.body().string();
if (resp != null) {
Log.d("Statuscode", String.valueOf(response.code()));
Log.d("Body", response.body().string());
}
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
Chaque fois que je lance l'application, elle se bloque lorsque je clique sur le bouton d'enregistrement, en raison d'une EXPECTION FATALE 'Android.os.NetworkOnMainThreadException'.
J'ai déjà lu quelque chose sur l'AsyncTask mais je ne sais pas exactement comment faire.