繁体   English   中英

用json数据下载图像(retrofit2 android)

[英]Download image with json data (retrofit2 android)

我想下载图片,但网址图片不是直接的,应该发送类似的附加数据:

url : http://example.com/download

数据:

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

和服务器回调数据图像以base64的形式

我使用此代码,但服务器返回500代码:

restservice:

@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();
                    }
                }


            });

这是一个显示如何下载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) {
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM