0

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

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

问题是示例代码提供了可绘制的图像。我需要用存储在我的 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 上的第一个问题,所以如果我的问题做错了,请给我一些提示!!!谢谢!

4

1 回答 1

1

这是一个老问题,但还没有回答。我相信您的问题是您在 getCount 方法中返回 0 。我正在从事与此非常相似的先前项目,并在我的项目中发现了此错误。getCount 需要返回您要查看的条目总数。

public int getCount() {
    return 0;        //Needs to return something other than zero 
}
于 2014-01-23T04:06:22.627 回答