保存在SD卡上的图像的Listview变得非常慢

时间:2016-10-10 00:36:39

标签: android sqlite listview android-asynctask imageview

我有一个应用程序从相机中获取图像,然后将它们存储在一个文件夹中,路径存储在SQLite数据库中,随后显示在Listview中,但是当我滚动时,ListView的移动速度非常慢。

Android监视器向我显示以下消息

  

应用程序可以在主线程上做太多工作。

我已经读过做AsyncTask问题解决了,我想知道如何使用AsyncTask获取图像的路径。

这是我的代码

public class PropiedadCursorAdapter extends CursorAdapter{

private PropiedadDbAdapter dbAdapter =null;

public PropiedadCursorAdapter (Context context,  Cursor c){
    super(context, c);
    dbAdapter = new PropiedadDbAdapter(context);
    dbAdapter.abrir();
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {

    View view =((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.layout_lista_propiedades,parent,false);
    ViewHolder holder = new ViewHolder();
    holder.ivCasa = (ImageView) view.findViewById(R.id.ivCasa);
    holder.tvTitulo= (TextView) view.findViewById(R.id.tv_titulo);
    holder.tvUbicacion= (TextView) view.findViewById(R.id.tv_ubicacion);

    view.setTag(holder);
    return view;
}

static class ViewHolder {
    ImageView ivCasa;
    TextView tvTitulo;
    TextView tvUbicacion;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {

    ViewHolder holder = (ViewHolder) view.getTag();
    String cadena = cursor.getString(cursor.getColumnIndex(PropiedadDbAdapter.C_COLUMNA_IMAGENES));
    Picasso.with(context).load(cadena).into(holder.ivCasa);

    holder.tvUbicacion.setText(cursor.getString(cursor.getColumnIndex(PropiedadDbAdapter.C_COLUMNA_DESCRIPCION)));
    holder.tvTitulo.setText(cursor.getString(cursor.getColumnIndex(PropiedadDbAdapter.C_COLUMNA_TITULO)));
}}

这是我的AsyncTask

public class getImageTask extends AsyncTask<PropiedadCursorAdapter.ViewHolder, Void, Bitmap> {

private PropiedadCursorAdapter.ViewHolder v;


@Override
protected Bitmap doInBackground(PropiedadCursorAdapter.ViewHolder... params) {
    v = params[0];
    return null;
}

@Override
protected void onPostExecute(Bitmap bitmap) {
    super.onPostExecute(bitmap);
    String cadena = PropiedadDbAdapter.C_COLUMNA_IMAGENES; 

} }

由于

1 个答案:

答案 0 :(得分:0)

你不应该在bindView数据采集中进入适配器,但是应该请求完整的数据初始化,然后存储在Bean的包中,然后设置为Adapter,这样速度会快得多。