je dois télécharger l'image du serveur et l'enregistrer dans le dossier, donc je me sers Retrofit 2.Rénovation 2 image télécharger et enregistrer dans le dossier
Le problème est que les images enregistrées est vide quand je cherche dans le dossier et J'ai essayé de déboguer et j'ai vu que Bitmap est nul.
Je ne comprends pas pourquoi, voici mon code:
@GET("images/{userId}/{imageName}")
@Streaming
Call<ResponseBody> downloadImage(@Path("userId") String userId, @Path("imageName") String imageName);
Télécharger le code d'image:
private void downloadImage(final int position) {
String url = "htttp://myserver.com/";
retrofitImage = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
imageApi = retrofitImage.create(BlastApiService.class);
String userId = feedList.get(position).getUserId();
String fileName = feedList.get(position).getFile();
Call<ResponseBody> imageCall = imageApi.downloadImage(userId, fileName);
imageCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if(response.isSuccess()){
String fileName = feedList.get(position).getFile();
InputStream is = response.body().byteStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
saveImage1(bitmap, fileName);
} else{
try {
Log.d("TAG", "response error: "+response.errorBody().string().toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.d("TAG", "Image download error: " + t.getLocalizedMessage());
}
});
}
est ici méthode pour enregistrer l'image .
private void saveImage1(Bitmap imageToSave, String fileName) {
// get the path to sdcard
File sdcard = Environment.getExternalStorageDirectory();
// to this path add a new directory path
File dir = new File(sdcard.getAbsolutePath() + "/FOLDER_NAME/");
// create this directory if not already created
dir.mkdir();
// create the file in which we will write the contents
File file = new File(dir, fileName);
try {
FileOutputStream out = new FileOutputStream(file);
imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
counter++;
// if (counter < feedList.size()) {
//downloadImage(counter);
//} else {
setImage();
//}
} catch (Exception e) {
e.printStackTrace();
}
}
Pourquoi vous n'utilisez pas un ImageLoader dédié, dire Glide ou UIL? Juste curieux et essayant de comprendre le contexte. –
String url = "htttp: //myserver.com/"; est faux! 3 t dans htttp. –
@ElvisChweya Client veut que je télécharge des images dans un dossier, puis d'afficher à partir du dossier local au lieu d'utiliser le chargement d'image directement à partir du serveur. Étant donné que l'application ne dispose que d'une seule vue d'image et que l'API me renvoie 10 images, le client ne souhaite pas que l'utilisateur attende quelques secondes pour afficher l'image du serveur (images de 1 à 2 Mo). – Zookey