Загрузить изображение с данными JSON (Retrofit2 Android) - PullRequest
0 голосов
/ 25 июня 2019

Я хочу загрузить изображение, но URL-адрес не является прямым и должен отправлять дополнительные данные, например:

url : http://example.com/download

данные:

 {
    "phoneNumber":"9199191",
    "token":"1KAwqCxCdQUjTvTK9EtT7N",
    "fileName":"632_macbook_pro.jpg"
    }

и изображение данных обратного вызова сервера в виде base64

Я использую эти коды, но сервер возвращает код 500:

отдых:

@POST("download")
    Call<ResponseBody> getImage(
            @Body JsonObject data,
            @HeaderMap Map<String, String> headers
    );

Java-код:

JsonObject params = new JsonObject();
            params.addProperty("phoneNumber",settingMain.getPhoneNum());
            params.addProperty("token",settingMain.getSecureLogin());
            params.addProperty("fileName",fileName);

            Call<ResponseBody> myCall = restService.getImage(params, UrlController.AddHeadersDownload(fileName));
            myCall.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> responseObj) {
                    try {
Log.e("DownloadCode",responseObj.code()+"");
                        if (responseObj.isSuccessful() && responseObj.code()==200) {

} catch (JSONException e) {
                        e.printStackTrace();
                        Log.e("JSONException",e.toString());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }


            });

1 Ответ

0 голосов
/ 25 июня 2019

Это небольшой пример, показывающий, как загрузить файл Retrofit JAR. Вы можете адаптировать его к вашим потребностям. Это интерфейс:

import com.squareup.okhttp.ResponseBody;
import retrofit.Call;
import retrofit.http.GET;
import retrofit.http.Path;

interface RetrofitDownload {
    @GET("/maven2/com/squareup/retrofit/retrofit/2.0.0-beta2/{fileName}")
    Call<ResponseBody> downloadRetrofit(@Path("fileName") String fileName);
}

А это класс Java, использующий интерфейс:

import com.google.common.io.Files;
import com.squareup.okhttp.ResponseBody;
import retrofit.Call;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;

import java.io.File;
import java.io.IOException;

public class Main {

    public static void main(String... args) {
        Retrofit retrofit = new Retrofit.Builder().
                baseUrl("http://repo1.maven.org").
                build();

        RetrofitDownload retrofitDownload = retrofit.create(RetrofitDownload.class);

        Call<ResponseBody> call = retrofitDownload.downloadRetrofit("retrofit-2.0.0-beta2.jar");

        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Response<ResponseBody> response, Retrofit retrofitParam) {
                File file = new File("retrofit-2.0.0-beta2.jar");
                try {
                    file.createNewFile();
                    Files.asByteSink(file).write(response.body().bytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Throwable t) {
            }
...