Verwenden von Retrofit2 Ich möchte eine PNG-Upload-Anfrage an meine API senden. Es muss eine POST-Anfrage sein und png wird als Formular-Datenfeld "img" übergeben. Ich testete meine API mit Postman und alles funktioniert, aber jetzt möchte ich diese Anfrage von Android-App mit Retrofit2 machen. Ist diese Bibliothek überhaupt dazu in der Lage?Wie wird eine POST-Anfrage mit Retrofit2 gemacht, wenn eines der Formulardatenfelder eine Datei ist?
Wie wird eine POST-Anfrage mit Retrofit2 gemacht, wenn eines der Formulardatenfelder eine Datei ist?
Antwort
ein Bild hochladen:
File file = new File("/storage/emulated/0/Pictures/MyApp/test.jpg");
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(Headers.of("Content-Disposition",
"form-data; name=\"image\";filename=\""
+ file.getName() + "\""),
RequestBody.create(MEDIA_TYPE_JPG, file))
.build();
// Todo: replace with your own interface e.g. apiClient
Call<ResponseBody> call = apiClient.uploadImage(requestBody);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.v("Upload", "success");
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e("Upload error:", t.getMessage());
}
});
Beispiel Schnittstelle und erforderliche Endpunktmethode definiert:
public interface ApiClient {
@Multipart
@POST("/content")
Call<ResponseBody> uploadImage(@Part("image") RequestBody image);
}
können Sie Fast Android Networking Bibliothek für die versuchen können, wie einfach und schnell Bibliothek android Networking ist. Ich habe diese Bibliothek erstellt, die auf OKHttp aufgebaut ist und mehr Funktionen und Anpassungen als Retrofit hat.
in Ihrer gradle Datei hinzufügen depedencies
Kompilierung 'com.amitshekhar.android:android-networking:0.0.1'
File file = new File(imagePath);
AndroidNetworking.upload(url)
.addMultipartFile("img",file)
.setTag("uploadTest")
.setPriority(Priority.HIGH)
.build()
.setUploadProgressListener(new UploadProgressListener() {
@Override
public void onProgress(long bytesUploaded, long totalBytes) {
// do anything with progress
}
})
.getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
// do anything with response
}
@Override
public void onError(ANError error) {
// handle error
}
});
}
Ich kann keine andere Bibliothek verwenden. Ich benutze Retrofit2 bereits überall in meiner App. Eine Bibliothek zu ersetzen wäre eine Belastung. – Egis
@Egis: Ok Bro, ich werde versuchen, es durch Nachrüstung zu lösen und informieren Sie bald. Ich wollte nur ein Feedback zu https://github.com/amitshekhariitbhu/Fast-Android-Networking haben. –
Es funktioniert! Vielen Dank. Ich habe eine ganze Weile damit zu kämpfen gehabt. – Egis