Je crée un référentiel HASHMAP principal pour la mise en cache d'images utilisateur provenant du serveur. ce cache est statique. Ce cache enregistre l'ID utilisateur en tant que clé et tableau d'octets en tant que valeur.got null lors de la création d'un bitmap à partir d'un tableau d'octets
private static HashMap<String, byte[]> sDrawables;
public static HashMap<String, byte[]> getMapInstance(){
if (sDrawables == null)
sDrawables = new HashMap<>();
return sDrawables;
}
J'utilise des AsyncTask pour le téléchargement des images à partir du serveur et de mettre ce tableau d'identité et des images sur hashmap et après cela, je mets cette carte à ma principale hashmap statique:
for (Map.Entry<String, byte[]> entry : drawables.entrySet()) {
ImgFactory.getMapInstance().put(entry.getKey(), entry.getValue());
}
Sur la place que je veux mettre cette image d'utilisateur à mon imageview, j'envoie l'identification d'utilisateur au hashmap principal et après l'avoir trouvé j'obtiens sa valeur et je convertis cette valeur en bitmap. mais bitmap il est pas créé mon bitmap est nulle:
public static Drawable getConfigDrawable(Context context, String name) {
if (getMapInstance() != null && getMapInstance().containsKey(name)) {
Log.i("====>", "getConfigDrawable: "+ getMapInstance().containsKey(name));
byte[] arr = getMapInstance().get(name);
Bitmap bitmap = BitmapFactory.decodeByteArray(arr, 0, arr.length);
Log.i("===", "getConfigDrawable: " + bitmap.getHeight());
return new BitmapDrawable(context.getResources(), bitmap);
}
return null;
}
Le message
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getHeight()' on a null object reference
at safarayaneh.com.anotify.util.ImgFactory.getConfigDrawable(ImgFactory.java:72)
at safarayaneh.com.anotify.adapter.NotifyAdapter$1.onComplete(NotifyAdapter.java:201)
at safarayaneh.com.anotify.util.ImgFactory$1.onResult(ImgFactory.java:59)
at safarayaneh.com.anotify.tasks.GetImageTask.onPostExecute(GetImageTask.java:87)
at safarayaneh.com.anotify.tasks.GetImageTask.onPostExecute(GetImageTask.java:21)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Mon journal:
anotify.debug I/====>: getConfigDrawable: true
Log.i("=====", "getConfigDrawable: length:"+ arr.length);
debug I/=====: getConfigDrawable: length: 12090
EDIT
Enfin, ce code était correct et j'ai obtenu un bitmap.
byte[] tmp=new byte[result.getJSONArray("UserImage").length()];
for(int i=0;i<result.getJSONArray("UserImage").length();i++){
tmp[i]=(byte)(((int)result.getJSONArray("UserImage").get(i)) & 0xFF);
}
Je le convertis comme ceci: http://codepad.org/i4KzzJzl et ceci est ma réponse json: http://codepad.org/XVVFM9ia –
parce que ma réponse de json est byte: http://codepad.org/ XVVFM9ia –
Ok, puis obtenir bitmap en essayant decodeStream() .., au lieu de decodeByteArray() –