0

因此,我有一个名为 apps 的表,它有 4 列和一个名为 App_icon 的列,在其中我将 drawable 转换为 byte[] 并将其作为 blob 存储在“App_icon”列中。我有一个列表视图,它从表中提取字段,如图所示。我还需要通过将 blob 转换回图像来在左角显示图像。我用来从数据库中检索文本数据并显示的代码是:

mySQLiteAdapter.open();

    String[] arrayColumns = new String[] { Dbhelper.KEY_PKG,
            Dbhelper.KEY_APP, };
    int[] arrayViewIDs = new int[] { R.id.appname, R.id.pkgname };

    cursor = mySQLiteAdapter.getAllFolders();

    adapter = new SimpleCursorAdapter(
            getActivity().getApplicationContext(), R.layout.listview_items,
            cursor, arrayColumns, arrayViewIDs);
    lv.setAdapter(adapter);
    mySQLiteAdapter.close();

其中 KEY_PKG 和 KEY_APP 是显示在 textview 中的其他表名(appname 和 pkgname)。有人可以提供有关如何将图像绑定到相应字段的示例代码吗?问候,维杰

编辑:如果有人可以发布如何从所有行中仅获取“Ap​​p_icon”列的值并将其存储在数组中?那会很有帮助

编辑2:以下是用于获取图像的方法

adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        @Override
        public boolean setViewValue (View view, Cursor cursor, int columnIndex){
            if (view.getId() == R.id.app_icon) {
                ImageView IV=(ImageView) view;
                Bitmap icon;
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPreferredConfig = Bitmap.Config.ARGB_8888;
                byte[] image = null;
                Cursor images = mySQLiteAdapter.geticon();
                int rows = images.getCount();


                for(int i=1;i<=rows;i++){
                    image = mySQLiteAdapter.getIcon(i);            
                    icon = BitmapFactory.decodeByteArray(image , 0, image .length, options);
                    Toast.makeText(getActivity(), "executes"+rows, Toast.LENGTH_SHORT).show();
                    IV.setImageBitmap(icon);
                }

                //IV.setBackgroundColor(Color.TRANSPARENT);
                return true;
           }
            return false;
}

});
4

2 回答 2

0

首先将字节数组转换为位图,然后绑定到视图。所以定制一个适配器可以解决它。

于 2013-09-06T14:29:28.467 回答
0

这是一个将 byte[] 转换为位图的简单函数:

public static Bitmap getBitmapFromBytes(byte[] bytes)
{
    Bitmap bmp;
    bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    Bitmap mutableBitmap = bmp.copy(Bitmap.Config.ARGB_8888, true);
    return mutableBitmap;
}
于 2013-09-06T14:34:31.740 回答