首页 > 解决方案 > Picasso 不将 url 加载到 ImageView 传递值时抛出构造函数

问题描述

我正在使用带有 bindingAdapter 的 Picasso 将 url 加载到 imageView 中,我绑定了模型和布局,并且当我在MainActivity.

但是当将绑定变量设置为传递值的不同构造函数时,毕加索不加载 URL?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
    binding=DataBindingUtil.setContentView(this,R.layout.activity_main);



    //in this case .........> Picasso loads images
    binding.setGame(new Game());




    //but in this case .........>Picasso deosnt load images
    binding.setGame(new Game("Ori","//i.imgur.com/CQ7Ts4d.png"
                           ,"http://i.imgur.com/CQ7Ts4d.png"));

URL被传递到loadImage,我可以记录URL,但我不明白为什么毕加索不将它加载到视图中?

@BindingAdapter("loadImage")
public static void loadImage(ImageView view, String url) {
    if(url==null){
        url="http://i.imgur.com/CQ7Ts4d.png";

        Log.d(TAG,"  .....................[Cover Url is empty].................................");
    }else {
        Log.d(TAG,url);
    }

    Picasso.get()
            .load(url)
            .transform(new RoundedCornersTransformation(30, 0,
                    RoundedCornersTransformation.CornerType.ALL))
            .into(view);

这是我的模型



    private static final String TAG = "Testing";
    private String name;
    private String cover;
    private String backGround;


    public Game(){
    }


    public Game(String name, String cover, String backGround) {
        this.name = name;
        this.cover = cover;
        this.backGround = backGround;

    }




    public void setName(String name) {
        this.name = name;
    notifyPropertyChanged(BR.name);}

    public void setCover(String cover) {
        this.cover = cover;
        notifyPropertyChanged(BR.cover);
    }

    public void setBackGround(String backGround) {
        this.backGround = backGround;
        notifyPropertyChanged(BR.backGround);
    }





    @Bindable
    public String getName() {
        return name;
    }

    @Bindable
    public String getCover() {
        return cover;
    }

    @Bindable
    public String getBackGround() {
        return backGround;
    }






    @BindingAdapter("loadImage")
    public static void loadImage(ImageView view, String url) {
        if(url==null){
            url="http://i.imgur.com/CQ7Ts4d.png";

            Log.d(TAG,"  .....................[Cover Url is empty].................................");
        }else {
            Log.d(TAG,url);
        }

        Picasso.get()
                .load(url)
                .transform(new RoundedCornersTransformation(30, 0,
                        RoundedCornersTransformation.CornerType.ALL))
                .into(view);

和布局

<data>
    <variable
        name="game"
        type="com.example.surface.gamehub.Game"/> 

android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">



<ImageView
    android:id="@+id/game_background"
    android:layout_width="match_parent"
    android:layout_height="161dp"
    android:scaleType="fitXY"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/back_grounnd"
    app:blurImage="@{game.backGround}"

    />

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="match_parent"
    android:layout_height="28dp"
    app:layout_constraintBottom_toBottomOf="@+id/game_background"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:srcCompat="@color/transperante_gray" />


<ImageView
    android:id="@+id/game_cover"
    android:layout_width="103dp"
    android:layout_height="130dp"
    android:layout_marginStart="20dp"
    android:layout_marginTop="100dp"
    android:scaleType="fitXY"
    app:layout_constraintStart_toStartOf="@+id/game_background"
    app:layout_constraintTop_toTopOf="parent"
    app:loadImage="@{game.cover}"
    tools:src="@drawable/cover"

标签: androiddata-bindingpicasso

解决方案


很长一段时间后,我发现这一切都发生了,因为我传递的 URL 不包括(http://..),我得到了(//.....)URL 格式 JSON,所以我想我必须将它们格式化为字符串。


推荐阅读