NullPointerException使用哈希码从缓存中提取图像?

时间:2011-10-02 20:25:03

标签: android

我在这里有一个String字符串列表

 public String [] myRemoteImages = {imageUrl,imageUrl2,imageUrl3,imageUrl4,imageUrl5,imageUrl6,imageUrl7};

在我检索字符串后的postexecute中,我记录它们以确保它们不为空。 然后我

protected void onPostExecute(Void notUsed){
                    Log.e("URLS", imageUrl + imageUrl2 + imageUrl3 + imageUrl4 + imageUrl5 + imageUrl6 + imageUrl7);



                         adapter=new LazyAdapter(MainMenu.this, myRemoteImages);
                          ((Gallery) findViewById(R.id.gallery))
                          .setAdapter(adapter);

                          adapter.notifyDataSetChanged();

检索它们后,我创建一个BaseAdapter实例,它接受两个参数并将其设置为一个图库。

这是我的适配器。

  public LazyAdapter(Activity a, String[] d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());
}

public int getCount() {
    return data.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.lazyitemt, null);


    ImageView image=(ImageView)vi.findViewById(R.id.imageView);

    image.setLayoutParams(new LinearLayout.LayoutParams(250, 250));
    imageLoader.DisplayImage(data[position], activity, image);
    return vi;
}

}

现在我在FileCache类中的这个方法中得到一个NullPointer异常。它试图检查图像是否在缓存中。但是我在

收到错误

public File getFile(String url){

//Error here Nullpointer.
    String filename=String.valueOf(url.hashCode());
    File f = new File(cacheDir, filename);
    return f;

}

我正在提供带有url的字符串列表我不知道它为什么会出现nullpointer异常?

我这样调用getBitmap。

 private Bitmap getBitmap(String url) 
{
    File f=fileCache.getFile(url);

    //from SD cache
    Bitmap b = decodeFile(f);
    if(b!=null)
        return b;

    //from web
    try {
        Bitmap bitmap=null;
        URL imageUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
        conn.setConnectTimeout(30000);
        conn.setReadTimeout(30000);
        InputStream is=conn.getInputStream();
        OutputStream os = new FileOutputStream(f);
        Utils.CopyStream(is, os);
        os.close();
        bitmap = decodeFile(f);
        return bitmap;
    } catch (Exception ex){
       ex.printStackTrace();
       return null;
    }
}

0 个答案:

没有答案