在安卓系统中使用retrofit 2.0
,我的Json
响应是没有keyvalue
的base64 image
。如何获得image
。
发布于 2018-10-15 22:10:28
使用响应体
@GET
Call<ResponseBody> downloadUrl(@Header(Constants.AUTHORIZATION) String header, @Url String url);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(ConfigContentsManager.getInstance().getReadTimeOut(), TimeUnit.SECONDS)
.connectTimeout(ConfigContentsManager.getInstance().getConnectionTimeOut(), TimeUnit.SECONDS)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ServerManager.getInstance().getCmsUrl())
.client(okHttpClient)
.build();
RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);
Call<ResponseBody> request =null;
request= retrofitInterface.downloadUrl("...","....");
request.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
发布于 2018-10-15 22:35:06
如果您想从响应中获取图像,因为它没有键,则需要在.ResponseBody
中使用来自okhhtp3
的
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
}
插入以下代码:
//your other code
Bitmap bmp = BitmapFactory.decodeStream(response.body().byteStream());
imageView.setImageBitmap(bmp);
//your other code
发布于 2018-10-15 22:08:37
您可以使用ScalarsConverterFactory作为改造的转换器工厂,代码片段如下所示:
Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl)
.client(client)//client's type is OkHttpClient
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create()).build();
//然后可以通过将.convert字符串(由base64编码)修改为位图,从而获得字符串。
byte[] imgData = new byte[0];
try {
imgData = Base64.decode(data);
} catch (IOException e) {
e.printStackTrace();
}
Bitmap b = ImageUtil.bytesToBitmap(imgData);
将ScalarsConverterFactory依赖项添加到
implementation "com.squareup.retrofit2:converter-scalars:2.4.0"
//here 2.4.0 is version code you can choose any version what you want to use
https://stackoverflow.com/questions/52828793
复制相似问题