ImageCatche 处的 NullPointerException [英] NullPointerException at ImageCatche

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

问题描述

我不知道ImagaeCatche.params中的错误究竟是什么.它显示了空指针异常.我在行尾指出了错误编号.

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.

堆栈跟踪:

 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.

推荐答案

AppConstants.IMAGE_CACHE_DIR的值及其引用在函数中:

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);
}  

将其用于模拟器、手机时会有所不同.即访问 sdCard 上的路径.

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

因此您需要(ed)检查您在什么设备下收到该错误的场景.

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

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

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