android - 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"
解决方案
很长一段时间后,我发现这一切都发生了,因为我传递的 URL 不包括(http://..),我得到了(//.....)URL 格式 JSON,所以我想我必须将它们格式化为字符串。
推荐阅读
- wordpress - 我如何在每个产品(EDD)中每 60 分钟添加 5 次销售
- pine-script - 根据第二天的开盘创建买入/卖出信号
- azure - 是否可以使用多个线程进行追加 blob 还原?
- java - NoUniqueBeanDefinitionException:没有可用的“AppProperties”类型的合格 bean:预期的单个匹配 bean,但找到了 3
- google-api - YouTube API 配额,请解释一下。超出配额。怎么解决?
- javascript - 我如何在传递给函数的javascript中复制数据
- android - Kotlin 比较两个日期
- python - 创建新存储桶时的位置选项是什么?
- discord.py - 未在 Discord 中发送欢迎消息(使用 discord.py)
- azure - Azure 中的 Docker 容器应用服务。如何将 DefaultAzureCredential 用于 keyvault