使用线程

时间:2017-08-21 03:26:23

标签: java android image bitmap java-threads

我目前正在开发一个从相机拍摄照片并将photoPath保存在数据库中的项目,这工作正常,实际上我在加载所有图像时正确处理内存生成缩略图。

我想要的是我正在尝试将线程专门用于在布局中每个加载一个图像,因为例如,如果我有50个,正常加载它会显示布局,直到所有50个加载,同时它没有任何显示。

我已经尝试实现这个线程来加载一个,然后另一个,但它是一样的,直到它加载所有,它显示所有,这里我的代码:

    String query = "Select id_reg_mem, information from Memory_REG where type = 'PHOTO' and id_memory =" + id_memory;
        final Cursor resultado = memoryDB.rawQuery(query, null);

if(resultado.moveToFirst())
            noPhotos = resultado.getCount();

for(int i=0; i<noPhotos; i++)
        {
            new Thread()
            {
                public void run()
                {
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            updateNewPhoto(resultado.getString(1)); // I send the path from the DB to a method I made to add a tablerow with the image (inside an imageview)
                        }
                    });
                }
            }.start();

            if(i + 1 == noPhotos)
                break;
            resultado.moveToNext();
        }

这个方法,我将一个图像加载到TableRow中的ImageView。此方法实际上正在加载来自DB的所有图像。

protected void updateNewPhoto(String path)
    {
        ImageView iv;
        if(rows == null) {
            rows = new ArrayList<TableRow>();
            rows.add(new TableRow(TL.getContext()));
            iv = new ImageView(TL.getContext());
            iv.setLayoutParams(new TableRow.LayoutParams(250,250));
            iv.setTag(DB_Utils.maxIDRegMem(memoryDB) - 1);
            iv.setImageBitmap(getBitmapThumbnail(path));
            rows.get(0).addView(iv);
            TL.addView(rows.get(0));
            count = 2;
        }

        else
        {
            iv = new ImageView(TL.getContext());
            iv.setLayoutParams(new TableRow.LayoutParams(250,250));
            iv.setTag(DB_Utils.maxIDRegMem(memoryDB) - 1);
            iv.setImageBitmap(getBitmapThumbnail(path));
            if(count == 2)
            {
                rows.get(rows.size() - 1).addView(iv);
                count = 1;
            }

            else
            {
                rows.add(new TableRow(TL.getContext()));
                rows.get(rows.size() - 1).addView(iv);
                TL.addView(rows.get(rows.size() - 1));
                count = 2;
            }
        }

对我来说不幸的是,直到所有图像都被加载(所需的3秒钟)才会显示所有图像。我想的是没有图像限制,这就是为什么我想要一种每个人加载图像的方式,而不是一起加载。

你有什么想法吗?我感谢您的帮助。 感谢。

0 个答案:

没有答案