0

我正在使用 Volley Library 从服务器获取图像并使用 RecyclerView 中的 NetworkImageView 显示它。当我使用相同的 Android 数据绑定时,我遇到了异常。

Unable to decode stream: java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
resolveUri failed on bad bitmap uri

在使用实用方法(从适配器本身调用 setImageUrl)时,否则我可以显示图像。

  @BindingAdapter("imgurl")
   public void setImageUrl(NetworkImageView view, String imageURL) {
    Context context = view.getContext();
    ImageLoader mImageLoader = CustomVolleyRequestQueue.getInstance(context).getImageLoader();
    try {
        ImageLoader.getImageListener(view, R.drawable.story_big_default, R.drawable.story_big_default);
        Log.d("STORYMODEL", "setImageUrl: "+imageURL.trim());
        view.setImageUrl(imageURL.trim(), mImageLoader);
    } catch (Exception e) {
        e.printStackTrace();
        view.setImageResource(R.drawable.story_big_default);
    }
}

   <com.android.volley.toolbox.NetworkImageView
    android:id="@+id/ivBackground"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@drawable/story_small_default"
    android:scaleType="fitXY"
    android:src="@{storymodel.imgurl}" />

请帮忙,我可能在这里错过了什么?

4

5 回答 5

0

这可能是由于imageURL.trim()网址可能有空格使用引起的replace(" ","%20")

于 2017-06-30T10:28:27.110 回答
0
 <de.hdodenhof.circleimageview.CircleImageView
                    android:layout_width="@dimen/margin_80"
                    android:layout_height="@dimen/margin_80"
                    android:background="@drawable/ic_user_placeholder"
                    app:srcProfilePhoto="@{profileData.profilePhoto}" // pass url
                    app:civ_border_color="@color/gray"
                     />

最后在java文件中使用下面的代码

@BindingAdapter("app:srcProfilePhoto")
    public static void srcProfilePhoto(ImageView view, String imageUrl) {
        if (!TextUtils.isEmpty(imageUrl)) {
            RequestOptions options = new RequestOptions()
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .placeholder(R.drawable.ic_user_placeholder);
            Glide.with(view.getContext())
                    .load(imageUrl)
                    .apply(options)
                    .into(view);
        }
    }
于 2021-02-18T12:32:16.393 回答
0

我通过更改 BindingAdapter 参数解决了这个问题。这与 Model 和 Imageview 中的数据项之间的映射有关。https://mobikul.com/data-binding-part-ii-image-binding/

于 2017-07-13T07:59:38.807 回答
0
<com.android.volley.toolbox.NetworkImageView
        android:id="@+id/campaign_logo"
        android:layout_width="80dp"
        android:layout_height="80dp"           
        android:adjustViewBounds="true"
        android:background="@drawable/border_rectangle"
        android:padding="2dp"
        app:imageUrl="@{helper.brandLogo}" />

在您的图像视图中,在命名空间“app”下创建一个新属性“imageUrl”。并在您的数据绑定助手类或 pojo 中创建如下方法和字符串值“brandLogo”。使用图像的 url 初始化此变量的值。

@BindingAdapter("imageUrl")
public static void getBrandLogo(View view, String imageUrl) {
    NetworkImageView imageView = (NetworkImageView) view;
    imageView.setImageUrl(imageUrl, imageLoader);
}

**如果您使用过 Volley,您必须了解使用 ImageLoader 从网络加载图像,或者您可以使用 Picasso 或其他库以相同的方法加载

此外,您还可以添加一个占位符,按照与上述相同的步骤创建一个新属性并将绑定适配器注释编辑为

@BindingAdapter("imageUrl", "placeholder", requireAll = false/true)
于 2017-09-14T09:08:26.110 回答
-3

使用 Picasso 库在 ImageView 中加载图像替换 NetworkImageView

例如,

ImageView thumbNail;

对于在 Imageview 中加载图像,

Picasso.with(activity).load(url).noFade().into(thumbNail);
于 2017-06-30T10:27:18.443 回答