Verwenden Sie OkHttp3, um GET- und POST-Anforderungen zu stellen.
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);
//Holen Sie sich GET-Taste und POST-Taste
Button getButton = findViewById(R.id.getButton);
Button postButton = findViewById(R.id.postButton);
//Wenn die GET-Taste gedrückt wird
getButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OkHttpGet getTask = new OkHttpGet();
getTask.execute();
}
});
//Wenn die POST-Taste gedrückt wird
postButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OkHttpPost postTask = new OkHttpPost();
postTask.execute();
}
});
}
}
Dieses Mal habe ich separate Klassen für Get und Post erstellt und sie aufgerufen. Beziehungsweise get.Task.execute(); postTask.execute(); Ruft mit an.
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-Anforderungsendpunkt";
//Antwortdaten
String strData = "";
//OkHttp Instanziierung
OkHttpClient client = new OkHttpClient();
//Build-Anfrage einschließlich URL
Request request = new Request.Builder()
.url(url)
.get()
.build();
try {
//Ausführung anfordern
Response response = client.newCall(request).execute();
//Holen Sie sich Daten aus dem Hauptteil der Antwort
strData = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return strData;
}
@Override
protected void onPostExecute(String str) {
Log.d("Debug",str);
}
}
Dieses Mal habe ich die URL einschließlich der Abfrage in der URL festgelegt. Es scheint, dass zeitaufwändige Verarbeitung nicht im Hauptthread ausgeführt werden kann, daher wird AsyncTask für die asynchrone Verarbeitung verwendet. Führen Sie in doInBackground einen zeitaufwändigen Prozess aus (hier eine Anforderung mit OkHttp), und wenn dies erledigt ist Es fühlt sich an, als würde der Prozess zu onPostExecute verschoben. onPostExecute gibt das Ergebnis der von doInBackground durchgeführten asynchronen Verarbeitung an den Hauptthread zurück. Wenn Sie also das Ergebnis der Anforderung auf dem Bildschirm anzeigen möchten, können Sie dies hier tun. Vielleicht.
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\":\"Name\", \"taxis\":\"Einstufung\"}";
@Override
protected String doInBackground(String... strings) {
OkHttpClient client = new OkHttpClient();
String url = "URL für POST verwendet";
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);
}
}
Ich übergebe Daten im JSON-Format per POST. Davon abgesehen ist es dasselbe wie GET.
Recommended Posts