NullPointerException异常的ImageCatche [英] NullPointerException at ImageCatche

查看:165
本文介绍了NullPointerException异常的ImageCatche的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道究竟在ImagaeCatche.params.It错误显示了空指针exception.I指示在该行的末尾错误编号。

堆栈跟踪:

  E / AndroidRuntime(1464):致命异常:主要
 E / AndroidRuntime(1464):工艺:com.gems.android,PID:1464
 E / AndroidRuntime(1464):显示java.lang.NullPointerException
 E / AndroidRuntime(1464):在com.sit.fth.util.ImageCache.getDiskCacheDir(ImageCache.java:514)
 E / AndroidRuntime(1464):在com.sit.fth.util.ImageCache $ ImageCacheParams< INIT>(ImageCache.java:463)。
 E / AndroidRuntime(1464):在com.sit.fth.frgment.HomeFragment.onCreateView(HomeFragment.java:82)
 E / AndroidRuntime(1464):在android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
 E / AndroidRuntime(1464):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
 E / AndroidRuntime(1464):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
 E / AndroidRuntime(1464):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
 E / AndroidRuntime(1464):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
 E / AndroidRuntime(1464):在android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
 E / AndroidRuntime(1464):在android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
 E / AndroidRuntime(1464):在android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
 E / AndroidRuntime(1464):在android.support.v4.view.ViewPager.populate(ViewPager.java:914)
 E / AndroidRuntime(1464):在android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
 E / AndroidRuntime(1464):在android.view.View.measure(View.java:16497)
 E / AndroidRuntime(1464):在android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:719)
 E / AndroidRuntime(1464):在android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
 E / AndroidRuntime(1464):在android.view.View.measure(View.java:16497)
 E / AndroidRuntime(1464):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
 E / AndroidRuntime(1464):在android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
 E / AndroidRuntime(1464):在android.view.View.measure(View.java:16497)
 E / AndroidRuntime(1464):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
 E / AndroidRuntime(1464):在com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
E / AndroidRuntime(1464):在android.view.View.measure(View.java:16497)
 E / AndroidRuntime(1464):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
 E / AndroidRuntime(1464):在android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
 E / AndroidRuntime(1464):在com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2291)
 E / AndroidRuntime(1464):在android.view.View.measure(View.java:16497)
 E / AndroidRuntime(1464):在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
 E / AndroidRuntime(1464):在android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
 E / AndroidRuntime(1464):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
 E / AndroidRuntime(1464):在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
 E / AndroidRuntime(1464):在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5670)
 E / AndroidRuntime(1464):在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:761)
 E / AndroidRuntime(1464):在android.view.Choreographer.doCallbacks(Choreographer.java:574)
:E / AndroidRuntime(1464):在android.view.Choreographer.doFrame(Choreographer.java:544)
 E / AndroidRuntime(1464):在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:747)
 E / AndroidRuntime(1464):在android.os.Handler.handleCallback(Handler.java:733)
 E / AndroidRuntime(1464):在android.os.Handler.dispatchMessage(Handler.java:95)
 E / AndroidRuntime(1464):在android.os.Looper.loop(Looper.java:136)
 E / AndroidRuntime(1464):在android.app.ActivityThread.main(ActivityThread.java:5017)
 E / AndroidRuntime(1464):在java.lang.reflect.Method.invokeNative(本机方法)
 E / AndroidRuntime(1464):在java.lang.reflect.Method.invoke(Method.java:515)
 E / AndroidRuntime(1464):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
 E / AndroidRuntime(1464):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
 E / AndroidRuntime(1464):在dalvik.system.NativeStart.main(本机方法)
 

ImageCatche.java:

 包com.sit.fth.util;

公共类ImageCache {
私有静态最后字符串变量=ImageCache;

以KB为单位//默认内存缓存大小
私有静态最终诠释DEFAULT_MEM_CACHE_SIZE = 1024 * 5; // 5MB

以字节为单位//默认磁盘缓存大小
私有静态最终诠释DEFAULT_DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB

图像写入磁盘缓存时//的COM pression设置
私有静态最后的COM pressFormat DEFAULT_COM preSS_FORMAT = com的pressFormat.JPEG;
私有静态最终诠释DEFAULT_COM preSS_QUALITY = 70;
私有静态最终诠释DISK_CACHE_INDEX = 0;

//常量可以轻松地切换各种缓存
私有静态最终布尔DEFAULT_MEM_CACHE_ENABLED = TRUE;
私有静态最终布尔DEFAULT_DISK_CACHE_ENABLED = TRUE;
私有静态最终布尔DEFAULT_INIT_DISK_CACHE_ON_CREATE = FALSE;

私人DiskLruCache mDiskLruCache;
私人LruCache<字符串,BitmapDrawable> mMemoryCache;
私人ImageCacheParams mCacheParams;
私人最终对象mDiskCacheLock =新的对象();
私人布尔mD​​iskCacheStarting = TRUE;

私人的HashSet< SoftReference<位图>> mReusableBitmaps;

私人ImageCache(ImageCacheParams cacheParams){
    的init(cacheParams);
   }


     公共静态ImageCache的getInstance(
        FragmentManager fragmentManager,ImageCacheParams cacheParams){

    //搜索,或创建非UI RetainFragment的实例
    最后RetainFragment mRetainFragment = findOrCreateRetainFragment(fragmentManager);

    //看看我们是否已经存储在RetainFragment的ImageCache
    ImageCache imageCache =(ImageCache)mRetainFragment.getObject();

    //没有现成的ImageCache,创建一个并将其存储在RetainFragment
    如果(imageCache == NULL){
        imageCache =新ImageCache(cacheParams);
        mRetainFragment.setObject(imageCache);
    }

    返回imageCache;
}


公共静态类ImageCacheParams {

公众诠释memCacheSize = DEFAULT_MEM_CACHE_SIZE;
公众诠释diskCacheSize = DEFAULT_DISK_CACHE_SIZE;
公共文件diskCacheDir;
公众的COM pressFormat COM pressFormat = DEFAULT_COM preSS_FORMAT;
公众诠释COM pressQuality = DEFAULT_COM preSS_QUALITY;
公共布尔memoryCacheEnabled = DEFAULT_MEM_CACHE_ENABLED;
公共布尔diskCacheEnabled = DEFAULT_DISK_CACHE_ENABLED;
公共布尔initDiskCacheOnCreate = DEFAULT_INIT_DISK_CACHE_ON_CREATE;


公共ImageCacheParams(上下文的背景下,字符串diskCacheDirectoryName){
    diskCacheDir = getDiskCacheDir(背景下,diskCacheDirectoryName); <  - 第375错误
}


公共无效setMemCacheSizePercent(浮动百分比){
    如果(百分号< 0.05f ||%的> 0.8f){
        抛出新抛出:IllegalArgumentException(setMemCacheSizePercent  - %的必须是
                +为0.05和0.8(含));
    }
    memCacheSize = Math.round(百分比*调用Runtime.getRuntime()maxMemory()/ 1024);
  }
}

  私有静态布尔canUseForInBitmap(
    位图候选人,BitmapFactory.Options targetOptions){
  INT宽度= targetOptions.outWidth / targetOptions.inSampleSize;
  INT高= targetOptions.outHeight / targetOptions.inSampleSize;

  返回candidate.getWidth()==宽度安培;&安培; candidate.getHeight()==高度;
  }


 公共静态文件getDiskCacheDir(上下文的背景下,字符串uniqueName){
 //检查介质安装或存储是内置的,如果是的话,尽量使用外部缓存目录
 //否则使用内部缓存目录
   最后弦乐cachePath =
        Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())||
                !isExternalStorageRemovable()? getExternalCacheDir(上下文).getPath():其中; ---第四百零二错误
                        context.getCacheDir()getPath()。

返回新的文件(cachePath +文件分割符+ uniqueName);
}

}
 

HomeFragment.java:

 包com.sit.fth.frgment;

公共类HomeFragment扩展BaseFragment {

    私人浏览视图;
    私人ExpandableListView expListView;
    私人的ArrayList<字符串> childArrayList;

    名单<字符串> listDataHeader;
    HashMap的<字符串列表与LT;字符串>> listDataChild =新的HashMap<字符串列表与LT;字符串>>();

    私人诠释lastExpandedPosition = -1;
    INT lastExpandedGroupPosition;
    私人诠释mImageThumbSize;
    私人ImageFetcher mImageFetcher;

    私人的LinearLayout loadingLayout;
    私人TextView的无形;
    私人列表< ImgGallery> imggalleries;
    私人的LinearLayout listlayout;
    私人诠释崩溃= 1;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);
    }

    @覆盖
    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){
        鉴于= inflater.inflate(R.layout.home_fragment,NULL);
        // mTab​​Host =(TabHost)mRoot.findViewById(android.R.id.tabhost);

        mImageThumbSize = getResources()。getDimensionPixelSize(
                R.dimen.image_thumbnail_size);

        ((TextView中)view.findViewById(R.id.txt_header))的setText(HOME);

        ImageCacheParams cacheParams =新ImageCacheParams(getActivity()
                AppConstants.IMAGE_CACHE_DIR); < ---第82行错误

        cacheParams.setMemCacheSizePercent(0.25f); //设置内存缓存为25%
                                                    //应用程序内存

 }
 

任何人都可以帮助我,如果你知道如何解决these.Thank你。<​​/ P>

解决方案

AppConstants.IMAGE_CACHE_DIR的价值和它的引用是函数:

 公共静态文件getDiskCacheDir(上下文的背景下,字符串uniqueName){
 //检查介质安装或存储是内置的,如果是的话,尽量使用外部缓存目录
 //否则使用内部缓存目录
   最后弦乐cachePath =
        Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())||
                !isExternalStorageRemovable()? getExternalCacheDir(上下文).getPath():其中; ---第四百零二错误
                        context.getCacheDir()getPath()。

返回新的文件(cachePath +文件分割符+ uniqueName);
}
 

这时候使用它的仿真器,手机各不相同。即路径对SD卡的访问。

所以,你需要(ED)检查的情况下,是你得到的错误。什么设备

I doesn't know what exactly the error in ImagaeCatche.params.It shows the null pointer exception.I indicate the error number at the end of the line.

StackTrace:

 E/AndroidRuntime(1464): FATAL EXCEPTION: main
 E/AndroidRuntime(1464): Process: com.gems.android, PID: 1464
 E/AndroidRuntime(1464): java.lang.NullPointerException
 E/AndroidRuntime(1464):    at com.sit.fth.util.ImageCache.getDiskCacheDir(ImageCache.java:514)
 E/AndroidRuntime(1464):    at com.sit.fth.util.ImageCache$ImageCacheParams.<init>(ImageCache.java:463)
 E/AndroidRuntime(1464):    at com.sit.fth.frgment.HomeFragment.onCreateView(HomeFragment.java:82)
 E/AndroidRuntime(1464):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
 E/AndroidRuntime(1464):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
 E/AndroidRuntime(1464):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
 E/AndroidRuntime(1464):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
 E/AndroidRuntime(1464):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
 E/AndroidRuntime(1464):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
 E/AndroidRuntime(1464):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
 E/AndroidRuntime(1464):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
 E/AndroidRuntime(1464):    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
 E/AndroidRuntime(1464):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
 E/AndroidRuntime(1464):    at android.view.View.measure(View.java:16497)
 E/AndroidRuntime(1464):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
 E/AndroidRuntime(1464):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
 E/AndroidRuntime(1464):    at android.view.View.measure(View.java:16497)
 E/AndroidRuntime(1464):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
 E/AndroidRuntime(1464):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
 E/AndroidRuntime(1464):    at android.view.View.measure(View.java:16497)
 E/AndroidRuntime(1464):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
 E/AndroidRuntime(1464):    at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
E/AndroidRuntime(1464):     at android.view.View.measure(View.java:16497)
 E/AndroidRuntime(1464):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
 E/AndroidRuntime(1464):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
 E/AndroidRuntime(1464):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
 E/AndroidRuntime(1464):    at android.view.View.measure(View.java:16497)
 E/AndroidRuntime(1464):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
 E/AndroidRuntime(1464):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
 E/AndroidRuntime(1464):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
 E/AndroidRuntime(1464):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
 E/AndroidRuntime(1464):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
 E/AndroidRuntime(1464):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
 E/AndroidRuntime(1464):    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
: E/AndroidRuntime(1464):   at android.view.Choreographer.doFrame(Choreographer.java:544)
 E/AndroidRuntime(1464):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
 E/AndroidRuntime(1464):    at android.os.Handler.handleCallback(Handler.java:733)
 E/AndroidRuntime(1464):    at android.os.Handler.dispatchMessage(Handler.java:95)
 E/AndroidRuntime(1464):    at android.os.Looper.loop(Looper.java:136)
 E/AndroidRuntime(1464):    at android.app.ActivityThread.main(ActivityThread.java:5017)
 E/AndroidRuntime(1464):    at java.lang.reflect.Method.invokeNative(Native Method)
 E/AndroidRuntime(1464):    at java.lang.reflect.Method.invoke(Method.java:515)
 E/AndroidRuntime(1464):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
 E/AndroidRuntime(1464):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
 E/AndroidRuntime(1464):    at dalvik.system.NativeStart.main(Native Method)

ImageCatche.java:

package com.sit.fth.util;

public class ImageCache {
private static final String TAG = "ImageCache";

// Default memory cache size in kilobytes
private static final int DEFAULT_MEM_CACHE_SIZE = 1024 * 5; // 5MB

// Default disk cache size in bytes
private static final int DEFAULT_DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB

// Compression settings when writing images to disk cache
private static final CompressFormat DEFAULT_COMPRESS_FORMAT = CompressFormat.JPEG;
private static final int DEFAULT_COMPRESS_QUALITY = 70;
private static final int DISK_CACHE_INDEX = 0;

// Constants to easily toggle various caches
private static final boolean DEFAULT_MEM_CACHE_ENABLED = true;
private static final boolean DEFAULT_DISK_CACHE_ENABLED = true;
private static final boolean DEFAULT_INIT_DISK_CACHE_ON_CREATE = false;

private DiskLruCache mDiskLruCache;
private LruCache<String, BitmapDrawable> mMemoryCache;
private ImageCacheParams mCacheParams;
private final Object mDiskCacheLock = new Object();
private boolean mDiskCacheStarting = true;

private HashSet<SoftReference<Bitmap>> mReusableBitmaps;

private ImageCache(ImageCacheParams cacheParams) {
    init(cacheParams);
   }


     public static ImageCache getInstance(
        FragmentManager fragmentManager, ImageCacheParams cacheParams) {

    // Search for, or create an instance of the non-UI RetainFragment
    final RetainFragment mRetainFragment = findOrCreateRetainFragment(fragmentManager);

    // See if we already have an ImageCache stored in RetainFragment
    ImageCache imageCache = (ImageCache) mRetainFragment.getObject();

    // No existing ImageCache, create one and store it in RetainFragment
    if (imageCache == null) {
        imageCache = new ImageCache(cacheParams);
        mRetainFragment.setObject(imageCache);
    }

    return imageCache;
}


public static class ImageCacheParams {

public int memCacheSize = DEFAULT_MEM_CACHE_SIZE;
public int diskCacheSize = DEFAULT_DISK_CACHE_SIZE;
public File diskCacheDir;
public CompressFormat compressFormat = DEFAULT_COMPRESS_FORMAT;
public int compressQuality = DEFAULT_COMPRESS_QUALITY;
public boolean memoryCacheEnabled = DEFAULT_MEM_CACHE_ENABLED;
public boolean diskCacheEnabled = DEFAULT_DISK_CACHE_ENABLED;
public boolean initDiskCacheOnCreate = DEFAULT_INIT_DISK_CACHE_ON_CREATE;


public ImageCacheParams(Context context, String diskCacheDirectoryName) {
    diskCacheDir = getDiskCacheDir(context, diskCacheDirectoryName); <-- 375th Error
}


public void setMemCacheSizePercent(float percent) {
    if (percent < 0.05f || percent > 0.8f) {
        throw new IllegalArgumentException("setMemCacheSizePercent - percent must be "
                + "between 0.05 and 0.8 (inclusive)");
    }
    memCacheSize = Math.round(percent * Runtime.getRuntime().maxMemory() / 1024);
  }
}

  private static boolean canUseForInBitmap(
    Bitmap candidate, BitmapFactory.Options targetOptions) {
  int width = targetOptions.outWidth / targetOptions.inSampleSize;
  int height = targetOptions.outHeight / targetOptions.inSampleSize;

  return candidate.getWidth() == width && candidate.getHeight() == height;
  }


 public static File getDiskCacheDir(Context context, String uniqueName) {
 // Check if media is mounted or storage is built-in, if so, try and use external cache dir
 // otherwise use internal cache dir
   final String cachePath =
        Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
                !isExternalStorageRemovable() ?    getExternalCacheDir(context).getPath() : <---402nd Error 
                        context.getCacheDir().getPath();

return new File(cachePath + File.separator + uniqueName);
}

}

HomeFragment.java:

package com.sit.fth.frgment;

public class HomeFragment extends BaseFragment {

    private View view;
    private ExpandableListView expListView;
    private ArrayList<String> childArrayList;

    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild = new HashMap<String, List<String>>();

    private int lastExpandedPosition = -1;
    int lastExpandedGroupPosition;
    private int mImageThumbSize;
    private ImageFetcher mImageFetcher;

    private LinearLayout loadingLayout;
    private TextView invisible;
    private List<ImgGallery> imggalleries;
    private LinearLayout listlayout;
    private int collapse = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.home_fragment, null);
        // mTabHost = (TabHost) mRoot.findViewById(android.R.id.tabhost);

        mImageThumbSize = getResources().getDimensionPixelSize(
                R.dimen.image_thumbnail_size);

        ((TextView) view.findViewById(R.id.txt_header)).setText("HOME");

        ImageCacheParams cacheParams = new ImageCacheParams(getActivity(),
                AppConstants.IMAGE_CACHE_DIR);  <---82nd Line Error

        cacheParams.setMemCacheSizePercent(0.25f); // Set memory cache to 25% of
                                                    // app memory

 }

Anybody can help me if you know how to solve these.Thank You.

解决方案

The value of AppConstants.IMAGE_CACHE_DIR and its reference is in the function:

public static File getDiskCacheDir(Context context, String uniqueName) {
 // Check if media is mounted or storage is built-in, if so, try and use external cache dir
 // otherwise use internal cache dir
   final String cachePath =
        Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
                !isExternalStorageRemovable() ?    getExternalCacheDir(context).getPath() : <---402nd Error 
                        context.getCacheDir().getPath();

return new File(cachePath + File.separator + uniqueName);
}  

That varies when using it for emulator, phone. i.e. the accessing of path on the sdCard.

So you need(ed) to check the scenario under what device were you getting that error.

这篇关于NullPointerException异常的ImageCatche的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆