2
我創建了一個用於緩存來自服務器的用戶圖像的主HASHMAP回購。這個緩存是靜態的。該緩存將用戶ID保存爲鍵和字節數組作爲值。從字節數組創建位圖時得到空值
private static HashMap<String, byte[]> sDrawables;
public static HashMap<String, byte[]> getMapInstance(){
if (sDrawables == null)
sDrawables = new HashMap<>();
return sDrawables;
}
我用的AsyncTask的從服務器下載圖像,並把這個ID和圖像陣列上HashMap和在此之後,我把這個地圖我的主靜的HashMap:
for (Map.Entry<String, byte[]> entry : drawables.entrySet()) {
ImgFactory.getMapInstance().put(entry.getKey(), entry.getValue());
}
在地方我想將此用戶圖像設置爲我的圖像視圖,我將用戶標識發送給主散列圖,找到它後,我得到它的值,並將此值轉換爲位圖。但其位不創建我的位圖是空:
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;
}
消息
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)
我的日誌:
anotify.debug I/====>: getConfigDrawable: true
Log.i("=====", "getConfigDrawable: length:"+ arr.length);
debug I/=====: getConfigDrawable: length: 12090
編輯
最後,這些代碼是好的,我有一個位圖。
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);
}
我把它轉換成這樣:http://codepad.org/i4KzzJzl這是我的回覆json:http://codepad.org/XVVFM9ia –
因爲我的json響應是字節:http://codepad.org/ XVVFM9ia –
好吧然後獲取位圖與嘗試decodeStream()..,而不是decodeByteArray() –