2017-08-29 71 views
0

我有一个项目列表(6),我正在使用毕加索和OkHttp库在我的回收视图中下载和显示图像。使用毕加索和回收站视图来显示图像列表

我在我的回收站视图中有6个项目,其中3个(1,2,4)在服务器上有图像,项目3,5和6没有图像。但在我的回收商查看下载的项目1,2,4的图像也会显示项目3,5和6!我不知道问题在哪里。 这是从该适配器下载和加载图片与毕加索我的代码:

public class BaseListAdapter extends RecyclerView.Adapter<BaseListAdapter.ViewHolder> { 
    private List<PList> menuItems; 
    private Context mContext; 
    private ActivitySingleGroup activitySingleGroup; 


    //Bottom Sheets Views Declaration 
    private TextView txtSelectedProduct; 
    private TextView txtPRemark; 
    private TextView txtQty; 
    private EditText edtUserQty; 
    private Button btnBuy; 
    private Button btnDiscard; 
    private ViewPager mPager; 
    private CircleIndicator indicator; 

    public BaseListAdapter(List<PList> menuItems, Context mContext) { 
    this.menuItems = menuItems; 
    this.mContext = mContext; 
    this.activitySingleGroup = (ActivitySingleGroup) mContext; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 

    TextView txtName; 
    TextView txtPrice; 
    ImageView imgDefault; 
    LinearLayout parentLayout; 
    CoordinatorLayout coordinatorLayout; 

    public ViewHolder(View v) { 
     super(v); 

     txtName = (TextView) v.findViewById(R.id.txtName); 
     txtPrice = (TextView) v.findViewById(R.id.txtPrice); 
     imgDefault = (ImageView) v.findViewById(R.id.img_defaultImage); 
     parentLayout = (LinearLayout) v.findViewById(R.id.parentLayout); 
     coordinatorLayout = (CoordinatorLayout) v.findViewById(R.id.coordinatorLayout); 

    } 
    } 

    @Override 
    public BaseListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    // Create a new View 
    final View v = LayoutInflater.from(activitySingleGroup).inflate(R.layout.activity_normal_group_recycler, parent, false); 
    ViewHolder vh = new ViewHolder(v); 
    return vh; 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 


    //Download and Load Default Image from server into imgDefault ImageView 
    Picasso picasso; 
    OkHttpClient client = null; 
    String url = "https://bartarinapp-irdeveloper.rhcloud.com/api/images/download/"; 

    //Handel situations that default image variables will be null 
    if (menuItems.get(position).getPDefaultImage() != null && 
     menuItems.get(position).getPDefaultImage().getDefault() != null) { 

     if ((menuItems.get(position).getPDefaultImage().getDefault()) && 
     (menuItems.get(position).getPDefaultImage().getIId() != null)) { 

     url += menuItems.get(position).getPDefaultImage().getIId(); 

     client = ServerClass.downloadImage(
      menuItems.get(position).getPDefaultImage().getIId(), 
      holder.imgDefault, 
      activitySingleGroup); 

     picasso = new Picasso.Builder(mContext) 
      .downloader(new OkHttp3Downloader(client)) 
      .listener(new Picasso.Listener() { 
      @Override 
      public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 
       //Here your log 
       Log.i("I_ERROR", "Error is: " + exception.toString()); 
      } 
      }) 
      .build(); 

     } else { 
     url = null; 
     picasso = new Picasso.Builder(mContext) 
      .listener(new Picasso.Listener() { 
      @Override 
      public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 
       //Here your log 
       Log.i("I_ERROR", "Error is: " + exception.toString()); 
      } 
      }) 
      .build(); 

     } 
    } else { 
     url = null; 
     picasso = new Picasso.Builder(mContext) 
     .listener(new Picasso.Listener() { 
      @Override 
      public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 
      //Here your log 
      Log.i("I_ERROR", "Error is: " + exception.toString()); 
      } 
     }) 
     .build(); 
    } 


    picasso.cancelRequest(holder.imgDefault); 
    if (url != null && url.length() > 0) { 

     //put here picaso image load code 
     picasso.load(url) 
     .placeholder(R.drawable.loading_01) 
     .error(R.drawable.loading_02) 
     .into(holder.imgDefault); 

    } else { 
     holder.imgDefault.setImageDrawable(null); 
    } 

    holder.txtName.setText(menuItems.get(position).getPName()); 
    holder.txtPrice.setText(String.valueOf(menuItems.get(position).getPPrice())); 
    holder.parentLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     prepareBottomSheet(view, position, holder.coordinatorLayout); 
     } 
    }); 
    } 

    @Override 
    public int getItemCount() { 
    if (menuItems.size() > 0) { 

     return menuItems.size(); 

    } else { 
     return 0; 
    } 

    } 

This is an image of my problem

谢谢您的帮助。

+0

你得到什么错误请显示 –

+0

是一个全球变量的网址?并在加载图片之前,检查URL是否为空。 –

+0

不,我只是从服务器获取每个项目的Id。我检查了它们,它们是正确的。 – Ehsan

回答

1

只要把下面用毕加索

Picasso.with(this.context).cancelRequest(holder.imageView); 
    if(imgUrl!=null && imgUrl.trim().length()>0){ 
     //put here picaso image load code 
    }else { 
     holder.imageView.setImageResource(R.drawable.no_img); 
    } 
+0

我做到了,但它不适合我。 – Ehsan

+0

好的,没问题。只要检查url是否为空,然后设置手动绘制,当你找不到图像url时你想显示。 –

+0

我用你的代码和更新我的问题,但它不工作。我不知道我的代码有什么问题。 – Ehsan

0

有这样的图书馆即PICASO和滑翔

但我使用滑行库,我也没有什么问题,在图像视图进行负载图像一行这个问题,但它得到了由下面的代码解决了,请试试这个代码...

依赖

compile 'com.github.bumptech.glide:glide:4.0.0' 

    Glide.with(context.getApplicationContext()).load(imageUrl).signature(new StringSignature(String.valueOf(System.currentTimeMillis()))).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);