使用从数据库中获取的图像填充GridView

时间:2013-04-23 09:46:19

标签: android sqlite android-gridview

我真的需要你的帮助来解决对你们很多人来说可能显得愚蠢的问题。

我需要创建一个简单的Grindview并用图像填充它。我尝试了android开发者网站提供的示例代码,效果很好。

问题是示例代码提供了drawable的图像。我需要用存储在我的sqlite Db中的位图填充BLOB。

db经过测试并正常工作,我可以毫无问题地从BLOB获取位图。

在我的代码中,当活动开始时,没有任何反应,我得到一个没有图像的白色屏幕。我花了很多时间在这上面,我希望你能给我一些建议!!!提前谢谢你的回复! :d

这是我的班级代码:

package cover.me;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;

import cover.me.Game.SimulationView.Cursor;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class Gallery extends Activity{

    private LinearLayout myGallery;
    private android.database.Cursor cursor;
    private DbAdapter MyDb;
    private int x,y;
    private Display display;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gallery);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));


    }

    public class ImageAdapter extends BaseAdapter{
        private Context mContext;
        private DbAdapter MyDb;
        private int Counter;
        private ArrayList<Bitmap> Images = new ArrayList<Bitmap>();
        private boolean ImagesLoaded = false;



        public ImageAdapter(Context c){
            mContext = c;
        }

        public int getCount() {
            return 0;
        }

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

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



        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent){

            if(ImagesLoaded == false){  //Add bitmap to Images ArrayList the first time that getView is called
                MyDb = new DbAdapter(Gallery.this);
                MyDb.open();
                cursor = MyDb.fetchAllLevels();
                cursor.moveToFirst();

                for(int i=0;i<cursor.getCount()-1;i++){
                    byte[] image = cursor.getBlob(cursor.getColumnIndex(DbAdapter.LvL_Bitmap));
                    ByteArrayInputStream inputStream = new ByteArrayInputStream(image);
                    Bitmap mBitmap = BitmapFactory.decodeStream(inputStream);
                    Images.add(mBitmap);
                    cursor.moveToNext();
                }

                cursor.close();
                MyDb.close();
                ImagesLoaded = true;
            } 

            ImageView imageView;
            if (convertView == null){
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(8, 8, 8, 8);
            }

            else{
                imageView = (ImageView) convertView;
                }

            imageView.setImageBitmap(Images.get(Counter));
            Counter++;



            return imageView;
        }






    }   


}

这里是XML

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

这是我在StackOverflow上的第一个问题,如果我的问题出错了,请给我一些提示!谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个老问题,但尚未得到答复。我相信你的问题是你在getCount方法中返回0。我正在研究一个与此非常相似的先前项目,并发现我的这个错误。 getCount需要返回您要查看的条目总数。

public int getCount() {
    return 0;        //Needs to return something other than zero 
}