我想从setImageUrl得到一个空指针异常,我想从ImageLoader

时间:2014-05-30 19:20:35

标签: java android image url android-volley

我一直在尝试使用网址在Android上设置图片超过一周。看起来它会如此简单,但我觉得我一直在追尾。我终于发现了Volley,我的希望很高,但我仍然无法让它工作。

当我注释掉setImageUrl所在的行时,应用程序不会崩溃。如果我不对它进行评论,那么该行将与其余的函数一起执行,但似乎它会崩溃。

我没有正确创建我的ImageLoader吗?

我的BitmapLruCache类是否未正确创建?

有没有更简单的方法来完成这项基本任务?

public class MainActivity extends ActionBarActivity {
    private RequestQueue mrq;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);        
        LinearLayout layout = (LinearLayout) findViewById(R.id.activity_main);        
        ImageLoader mil = new ImageLoader(this.mrq, new BitmapLruCache(this));
        NetworkImageView img = new NetworkImageView(this);
        img.setImageUrl("http://www.clipartbest.com/cliparts/dTr/bez/dTrbeznT9.png", mil);
        layout.addView(img);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.activity_main, new PlaceholderFragment())
                    .commit();


        }
    }

这是我尝试过的两个版本的BitmapLruCache。

public class BitmapLruCache implements ImageCache {
    private LruCache<String, Bitmap> mMemoryCache;

    private static BitmapLruCache mInstance;

    public BitmapLruCache(Context ctx) {
        final int memClass = ((ActivityManager) ctx
                .getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();
        // Use 1/16th of the available memory for this memory cache.
        final int cacheSize = 1024 * 1024 * memClass / 16;
        mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getRowBytes() * value.getHeight();
            }
        };
    }

    public static BitmapLruCache getInstance(Context ctx) {
        if (mInstance == null) {
            mInstance = new BitmapLruCache(ctx);
        }
        return mInstance;
    }

    @Override
    public Bitmap getBitmap(String url) {
        return mMemoryCache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        mMemoryCache.put(url, bitmap);
    }
}


//  public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageCache {
//      public static int getDefaultLruCacheSize() {
//         final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
//         final int cacheSize = maxMemory / 8;
//
//        return cacheSize;
//      }
//
//      public BitmapLruCache() {
//         this(getDefaultLruCacheSize());
//      }
//
//    public BitmapLruCache(int sizeInKiloBytes) {
//         super(sizeInKiloBytes);
//     }
//
//     @Override
//      protected int sizeOf(String key, Bitmap value) {
//         return value.getRowBytes() * value.getHeight() / 1024;
//     }
//
//    @Override
//      public Bitmap getBitmap(String url) {
//         return get(url);
//     }
//
//    @Override
//     public void putBitmap(String url, Bitmap bitmap) {
//         put(url, bitmap);
//     }
//  }
//  

感谢您的帮助并花时间阅读本文。

0 个答案:

没有答案