从数据库加载许多图像时出错 - Android

时间:2012-02-15 03:39:12

标签: android sql image

嗯......我有一个有很多图像的应用程序。这些图像存储在SD卡中。我通过SQL请求检索它们。

因此,例如,他是一个典型的SQL:

    SELECT * FROM `table` 
    WHERE 
    tags like 
    '%verb%'

上面的代码将返回所有带有“动词”标记的图像。这导致84张图像。

然后,我循环将这些图像插入带有名称,标签等的列表中。以下是代码:

if (cursorImagens.getCount() > 0) {
    telaScroll.removeAllViews();
    lTodasImagens.removeAllViews();
    for (int i = 0; (i < cursorImagens.getCount()) ; i++) {
        TextView textoNome;
        TextView textoTags;
        LinearLayout linha;
        linha = (LinearLayout) LayoutInflater.from(getBaseContext()).inflate(R.layout.imgsinternas, lTodasImagens, false);
        final ImageButton figuraBotao;
        figuraBotao = (ImageButton) linha.findViewById(R.id.figura);
        figuraBotao.setImageDrawable(Drawable.createFromPath(PATH + cursorImagens.getString(4) + ".png"));
        final Uri uriImagem = Uri.parse(PATH + cursorImagens.getString(4) + ".png");
        textoNome = (TextView) linha.findViewById(R.id.txtNome);
        textoTags = (TextView) linha.findViewById(R.id.txtTags);
        textoNome.setText(cursorImagens.getString(4));
        textoTags.setText(cursorImagens.getString(3));
        figuraBotao.setOnTouchListener(new Button.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent arg1) {
                if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN){                           
                    currImageURI = uriImagem;
                    imgItem.setImageURI(uriImagem);
                }
                return false;
            }
        });                             

        lTodasImagens.addView(linha);
        View linhaHorizontal;

        linhaHorizontal = LayoutInflater.from(getBaseContext()).inflate(R.layout.linhahorizontalstyle, lTodasImagens, false);
        lTodasImagens.addView(linhaHorizontal);                             
        cursorImagens.moveToNext();
    }
    telaScroll.addView(lTodasImagens);
}

当我使用“verb”上面的参数运行此代码时,它会检索84个寄存器并获得FC。

你们建议我做什么?

感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

最好保存sdcard中的所有图像。然后在数据库中创建一个表并在该TABLE中存储所有图像路径。如果要显示图像,则从字符串路径创建位图并设置为图像。设置回收后该位图(到垃圾收集)。

由于在数据库中将图像保存为blob非常痛苦且耗时。建议如果您将更多图像保存到SD卡中并保存到TABLE的路径。

您将获得许多关于保存和显示来自sdard

的图像的教程

答案 1 :(得分:0)

如果您的图片太大,则必须先将它们缩小,然后再将它们设置为Drawable。尝试使用

BitmapFactory.decodeStream(InputStream is, Rect outPadding, Options opts)

有一个适当的opts.inSampleSize(例如,2会将你的图像缩小到一半),然后像这样创建你的drawable:

BitmapDrawable drawable = new BitmapDrawable(yourBitmap);