在显示java.lang.NullPointerException android.util.LruCache.put(Android版) [英] java.lang.NullPointerException in android.util.LruCache.put ( Android )
问题描述
我得到在我的谷歌崩溃和放此崩溃例外;我的应用程序的显示java.lang.NullPointerException在android.util.LruCache.put ANR的栏目
我不知道什么是错我确实需要一些帮助,请,为什么我得到这个空指针异常,以及如何解决它。
崩溃和放大器; ANR的:
了java.lang.RuntimeException:执行doInBackground发生错误()
在android.os.AsyncTask $ 3.done(AsyncTask.java:300)
在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
在java.util.concurrent.FutureTask.setException(FutureTask.java:222)
在java.util.concurrent.FutureTask.run(FutureTask.java:242)
在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:587)
在java.lang.Thread.run(Thread.java:841)
显示java.lang.NullPointerException:引起键== NULL ||值== NULL
在android.util.LruCache.put(LruCache.java:167)
在
com.b3du.im.GridAdapter.addBitmapToMemoryCache(GridAdapter.java:77)
在com.b3du.im.GridAdapter $ BitmapWorkerTaskVideo.doInBackground(GridAdapter.java:218)
在com.b3du.im.GridAdapter $ BitmapWorkerTaskVideo.doInBackground(GridAdapter.java:205)
在android.os.AsyncTask $ 2.call(AsyncTask.java:288)
在java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4个
code:
公共无效addBitmapToMemoryCache(字符串键,位图位图){
如果(getBitmapFromMemCache(键)== NULL){
mMemoryCache.put(键,位图);
}
}公共位图getBitmapFromMemCache(字符串键){
返回mMemoryCache.get(键);
}类BitmapWorkerTaskVideo扩展的AsyncTask<弦乐,太虚,位图> {
私人最终的WeakReference< ImageView的> imageViewReference; 公共BitmapWorkerTaskVideo(ImageView的ImageView的){
//使用的WeakReference,确保ImageView的可以被垃圾收集
imageViewReference =新的WeakReference< ImageView的>(ImageView的);
} //在后台德code图像。
@覆盖
保护位图doInBackground(字符串... PARAMS){
最后的位图位图=去codeSnapshotFromFileVideo(PARAMS [0],100,100);
addBitmapToMemoryCache(将String.valueOf(PARAMS [0]),位图);
返回位图;
} //完成后,看是否ImageView的仍然是围绕并设置位图。
@覆盖
保护无效onPostExecute(位图位图){
如果(imageViewReference = NULL&放大器;!&安培;!=位图NULL){
最后ImageView的ImageView的= imageViewReference.get();
如果(ImageView的!= NULL){
imageView.setImageBitmap(位图);
}
}
}公共位图德codeSnapshotFromFileVideo(字符串文件路径,诠释reqWidth,诠释reqHeight){ //创建一个文件,使用的文件路径
档案文件=新的文件(文件路径);
//首先去code。与inJustDe codeBounds = true来检查尺寸
最后BitmapFactory.Options选项=新BitmapFactory.Options();
options.inJustDe codeBounds = TRUE;
ThumbnailUtils.createVideoThumbnail(file.getAbsolutePath(),MediaStore.Video.Thumbnails.MICRO_KIND);
//计算inSampleSize
options.inSampleSize = calculateInSampleSize(选项,reqWidth,reqHeight);
options.inJustDe codeBounds = FALSE;
返回ThumbnailUtils.createVideoThumbnail(file.getAbsolutePath(),MediaStore.Video.Thumbnails.MICRO_KIND);}
公共静态位图createVideoThumbnail(字符串文件路径,诠释的那种)
创建一个视频的视频缩略图。可以返回空
如果视频损坏或不支持的格式。
所以,可能是位图
值为null。为了避免这种写您的code是这样的:
如果(位图!= NULL)
{
addBitmapToMemoryCache(将String.valueOf(PARAMS [0]),位图);
}
I'm getting this crash exception in my google Crashes & ANRs section for my app java.lang.NullPointerException in android.util.LruCache.put
I have no idea what's wrong I do need some help please, why I do get this null pointer exception and how to fix it.
Crashes & ANRs:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException: key == null || value == null
at android.util.LruCache.put(LruCache.java:167)
at
com.b3du.im.GridAdapter.addBitmapToMemoryCache(GridAdapter.java:77)
at com.b3du.im.GridAdapter$BitmapWorkerTaskVideo.doInBackground(GridAdapter.java:218)
at com.b3du.im.GridAdapter$BitmapWorkerTaskVideo.doInBackground(GridAdapter.java:205)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4 more
Code:
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
mMemoryCache.put(key, bitmap);
}
}
public Bitmap getBitmapFromMemCache(String key) {
return mMemoryCache.get(key);
}
class BitmapWorkerTaskVideo extends AsyncTask<String, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
public BitmapWorkerTaskVideo(ImageView imageView) {
// Use a WeakReference to ensure the ImageView can be garbage collected
imageViewReference = new WeakReference<ImageView>(imageView);
}
// Decode image in background.
@Override
protected Bitmap doInBackground(String... params) {
final Bitmap bitmap = decodeSnapshotFromFileVideo(params[0], 100, 100);
addBitmapToMemoryCache(String.valueOf(params[0]), bitmap);
return bitmap;
}
// Once complete, see if ImageView is still around and set bitmap.
@Override
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
final ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
public Bitmap decodeSnapshotFromFileVideo (String filepath, int reqWidth, int reqHeight) {
//Create a file, using the filepath
File file = new File (filepath);
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
ThumbnailUtils.createVideoThumbnail(file.getAbsolutePath(), MediaStore.Video.Thumbnails.MICRO_KIND);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
return ThumbnailUtils.createVideoThumbnail(file.getAbsolutePath(), MediaStore.Video.Thumbnails.MICRO_KIND);
}
public static Bitmap createVideoThumbnail (String filePath, int kind)
Create a video thumbnail for a video. May return null
if the video is corrupt or the format is not supported.
So, Might be bitmap
value is null. to avoid this Write your code like this:
if(bitmap != null)
{
addBitmapToMemoryCache(String.valueOf(params[0]), bitmap);
}
这篇关于在显示java.lang.NullPointerException android.util.LruCache.put(Android版)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!