Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有AsyncTask的Android自定义游标适配器_Android_Android Cursoradapter - Fatal编程技术网

带有AsyncTask的Android自定义游标适配器

带有AsyncTask的Android自定义游标适配器,android,android-cursoradapter,Android,Android Cursoradapter,我正在尝试建立一个列表,其中包含从设备上获取的图像和文本。事实证明,从手机上的摄像头拍摄图像需要一段时间,因此我正在尝试尽可能快地拍摄,这样用户体验就不会变慢。我从中得到的是,看起来所有的图像都加载到一个ImageView中,而不是扩展到所有其他ImageView(我不能完全确定我对ViewHolder技术和自定义CursorAdapter的实现是否正确) 公共类MyCustomCurserAdapter扩展了CursorAdapter{ 静态类视窗夹{ 公共文本视图名称文本; 公共图像查看图像

我正在尝试建立一个列表,其中包含从设备上获取的图像和文本。事实证明,从手机上的摄像头拍摄图像需要一段时间,因此我正在尝试尽可能快地拍摄,这样用户体验就不会变慢。我从中得到的是,看起来所有的图像都加载到一个
ImageView
中,而不是扩展到所有其他
ImageView
(我不能完全确定我对
ViewHolder
技术和自定义
CursorAdapter
的实现是否正确)

公共类MyCustomCurserAdapter扩展了CursorAdapter{
静态类视窗夹{
公共文本视图名称文本;
公共图像查看图像缩略图;
}
光标;
公共MyCustomCurserAdapter(上下文上下文、游标c、int标志){
super(上下文、c、标志);
//TODO自动生成的构造函数存根
}
@凌驾
公共void bindView(视图、上下文arg1、光标){
ViewHolder=(ViewHolder)view.getTag();
int pathCol=cursor.getColumnIndex(NewPicSQLiteHelper.COLUMN\u路径);
字符串imageInSD=cursor.getString(pathCol);
文件imgFile=新文件(imageInSD);
if(imgFile.exists()){
int nameCol=cursor.getColumnIndex(NewPicSQLiteHelper.COLUMN\u PIC\u NAME);
String name=cursor.getString(nameCol);
if(name!=null)
holder.nameText.setText(名称);
ImageTask任务=新的ImageTask(holder.imageThumbnail);
task.execute(imgFile);
}
}
@凌驾
公共视图新建视图(上下文arg0、光标cur、视图组父级){
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
视图=充气机。充气(R.layout.new\u pic\u项目,父项,false);
ViewHolder=新的ViewHolder();
holder=新的ViewHolder();
holder.nameText=(TextView)view.findViewById(R.id.pic\u name\u条目);
holder.image缩略图=(ImageView)view.findViewById(R.id.pic_缩略图);
//标记可以是任何对象,这恰好是ViewHolder
视图.设置标签(支架);
返回视图;
}
私有类ImageTask扩展了AsyncTask{
私有最终WeakReference imageViewReference;
公共图像任务(图像视图图像视图){
imageViewReference=新的WeakReference(imageView);
}
@凌驾
受保护位图doInBackground(文件…参数){
字符串路径=参数[0]。getAbsolutePath();
返回decodeSampledBitmapFromResource(路径,75,75);
}
@凌驾
受保护的void onPostExecute(位图结果){
if(imageViewReference!=null){
ImageView=imageViewReference.get();
如果(imageView!=null){
如果(结果!=null){
设置图像位图(结果);
设置可见性(imageView.VISIBLE);
}否则{
设置可见性(imageView.INVISIBLE);
}
}
}
}
私有位图解码SampleDbitMapFromResource(字符串orgImagePath、int-reqWidth、int-reqHeight){
}
私有int-calculateInSampleSize(BitmapFactory.Options选项、int-reqWidth、int-reqHeight){
}
}

我认为需要花费时间的可能原因是,图像的大小至少为1MB,您可以进一步更改为缩略图并检索它,如果仍然需要时间,您可以延迟下载,这是在我们从服务器拍摄图像时完成的(基本上,它的作用是在获取图像时加载文本并显示图像)

删除图像任务AsyncTask..

使用像或之类的库。对于几乎任何需要获取、调整大小和显示远程图像的情况都非常有效

我使用滑翔器从中加载图像


使用上述任何一种方法,看看其中的区别

我已经考虑到图像可能很难加载到RAM中,所以我使用了google建议的方法:
public class MyCustomCurserAdapter extends CursorAdapter {
  static class ViewHolder {
    public TextView nameText;
    public ImageView imageThumbnail;
  }


  Cursor cursor;

  public MyCustomCurserAdapter(Context context, Cursor c, int flags) {
    super(context, c, flags);
    // TODO Auto-generated constructor stub
  }

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

    ViewHolder holder = (ViewHolder)view.getTag();


    int pathCol = cursor.getColumnIndex(NewPicSQLiteHelper.COLUMN_PATH);
    String imageInSD = cursor.getString(pathCol);  
    File imgFile = new  File(imageInSD);

    if(imgFile.exists()){

        int nameCol = cursor.getColumnIndex(NewPicSQLiteHelper.COLUMN_PIC_NAME);
        String name = cursor.getString(nameCol);

        if (name != null) 
            holder.nameText.setText(name);

        ImageTask task = new ImageTask(holder.imageThumbnail);
        task.execute(imgFile);
    }

  }

  @Override
  public View newView(Context arg0, Cursor cur, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.new_pic_item, parent, false);
    ViewHolder holder = new ViewHolder();

    holder = new ViewHolder();
    holder.nameText = (TextView) view.findViewById(R.id.pic_name_entry);
    holder.imageThumbnail = (ImageView) view.findViewById(R.id.pic_thumbnail);

    // The tag can be any Object, this just happens to be the ViewHolder
    view.setTag(holder);


    return view;
  }


  private class ImageTask extends AsyncTask<File, Void, Bitmap>{
    private final WeakReference <ImageView> imageViewReference;

    public ImageTask(ImageView imageView) {
        imageViewReference = new WeakReference <ImageView> (imageView);
    }

    @Override
    protected Bitmap doInBackground(File... params) {
        String path = params[0].getAbsolutePath();

        return decodeSampledBitmapFromResource(path,75,75);
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        if (imageViewReference != null) {
            ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                if (result != null) {
                    imageView.setImageBitmap(result);
                    imageView.setVisibility(ImageView.VISIBLE);
                } else {
                                    imageView.setVisibility(ImageView.INVISIBLE);
                }
            }

        }

    }

    private Bitmap decodeSampledBitmapFromResource(String orgImagePath, int reqWidth, int reqHeight) {


    }

    private int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {

  }
}