Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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
Android-使用asynctask加载图像的Listview-有时显示图像,有时不显示_Android_Android Listview_Android Asynctask - Fatal编程技术网

Android-使用asynctask加载图像的Listview-有时显示图像,有时不显示

Android-使用asynctask加载图像的Listview-有时显示图像,有时不显示,android,android-listview,android-asynctask,Android,Android Listview,Android Asynctask,我正在尝试应用asynctask在listview项目中加载图像 我还试图比较两个值,以便知道视图是否仍然需要加载图像 @Override public void bindView(View view, Context context, Cursor cursor) { holder = (ViewHolder) view.getTag(); picPath = cursor.getString(18); if(picPath =

我正在尝试应用asynctask在listview项目中加载图像

我还试图比较两个值,以便知道视图是否仍然需要加载图像

        @Override
    public void bindView(View view, Context context, Cursor cursor) {
      holder = (ViewHolder) view.getTag();
      picPath = cursor.getString(18);

        if(picPath == null || picPath.isEmpty()){

          holder.myImage.setVisibility(View.GONE);

        }else{

          savingPath = picPath;

          AsyncTask<Void, Void, Void> showImage = new AsyncTask<Void, Void, Void>(){


                Bitmap b1;
                String syncPath;
                @Override
                protected Void doInBackground(Void... params) {

                    syncPath = savingPath;
                    b1 = setImageToImageView(syncPath);
                    return null;
                    }

                @Override
                protected void onPostExecute(Void result) {


                if (syncPath.equalsIgnoreCase(picPath)){

                    holder.myImage.setTag(syncPath);
                    holder.myImage.setImageBitmap(b1);
                    holder.myImage.setVisibility(View.VISIBLE);

                }else{


                    }

                    }

}

}

};
showImage.execute();
if (syncPath.equalsIgnoreCase(picPath))
我得到的是,有时它加载图像,有时它只加载几个,而且总是相同的图像

你知道我做错了什么吗

谢谢你的帮助

编辑

这是我所做的更改(仍然不起作用-使应用程序崩溃)

if(holder!=null&&holder.bitmage!=null){
holder.myImage.setImageBitmap(holder.biImage);
holder.myImage.setVisibility(View.GONE);
}否则{
savingPath=picPath;
AsyncTask showImage=新建AsyncTask(){
位图b1;
字符串同步路径;
@凌驾
受保护的Void doInBackground(Void…参数){
syncPath=savingPath;
b1=setImageToImageView(同步路径);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
holder.myImage.setTag(syncPath);
holder.myImage.setImageBitmap(holder.biImage);
holder.BITMAGE=b1;
holder.myImage.setVisibility(View.VISIBLE);
}
};
showImage.execute();

您可能遇到同步问题,因为所有异步任务都共享
保存路径。我建议您使用一些常用的库来加载图像:


这些是一些最流行的。它们非常易于使用,而且内置了缓存,因此您无需检查url是否相同-如果已经加载图像,库将从缓存中加载图像。

我真的不认为需要使用if(picPath==null | | picPath.isEmpty())条件,因为如果您已经下载了图像,您可以将位图设置为view holder以保存位图对象。在holder中添加一个字段作为位图位图bitImage,并分配b1

改变这个

 if(picPath == null || picPath.isEmpty())
作为


你介意将代码格式化一点,让我们更容易阅读和理解吗?不应该只需要一分钟左右…我尝试了…可读性更强一点我想我不是在下载图像,是手机公用文件夹中的图像。picPath是我从我的应用程序DB中获取的文件路径。你用-bitmag在代码中是什么意思e-它代表什么?在holder Classic中添加一个变量位图BITMAGE;,我真的不明白这段代码对我的尝试意味着什么。你说如果-holder!=null&&holder.BITMAGE!=null-那么我将holder设置为holder.BITMAGE-好的,为什么?下一步是什么?我有一个异步任务-这段代码用于在美国er正在ListView上滚动如果位图不在holder中,则仅使用async task.ok加载,然后在else中,您说将我将获得的位图放入holder.bitImage-但holder.bitImage未设置在holder.myImage上显示图片的任何位置。
 if(picPath == null || picPath.isEmpty())
 if(holder != null && holder.bitImage != null)
 {
  // set bitmap
  holder.myImage.setImageBitmap(holder.bitImage)
 }
 else 
 {
   // load the image using async task and set it to holder.bitImage 
   // also set it to the image view
   holder.myimage.setImageBitmap(b1);  // lets assume b1 is your image bitmap
   holder.bitImage = b1;

}