毕加索图像错误
Picasso ImageError
我正在使用 Picasso 在我的 android App.I 中显示来自服务器的图像 App.I 有 5 张图像 URL (HTTP 格式)从服务器获取并将其存储在字符串中 value.If 我向 Picasso(.jpg 格式)发送正确的 link 它可以正确运行并在我的图像视图中显示我的图像,如果在(.pdf 格式)中发送错误的 link 它会在我的图像中显示错误查看,但是当我从我的服务器传递空值或空值到字符串时,我的应用程序崩溃它的 运行 if 语句首先即使它的值为 null 或空 else 语句不是 运行 我应该更新什么在我的代码中,如果我从服务器获取空值,我的图像视图应该显示并且错误和文本视图值应该被更改。
// 代码仅在我的 If/Else 开始处:
if (image_fourth != null && image_fourth != ""){
Picasso.get().load(image_fourth).resize(200, 200).placeholder(R.drawable.placeholder).error(R.drawable.error).into(image1);
image1.setVisibility(View.VISIBLE);
buttons.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (image_second == null){
image_2t.setText("Image Not Found");
image_2t.setVisibility(View.GONE);
}
else if (image_second != null){
Picasso.get().load(image_second).resize(200, 200).placeholder(R.drawable.placeholder).error(R.drawable.error).into(image2);
image2.setVisibility(View.VISIBLE);
image_2t.setText("Image 2");
image_2t.setVisibility(View.VISIBLE);
}
}
});
}
else{
image_1t.setText("Image Not Found");
}
您可以尝试反转 if/else 语句。据我所知,Picasso 不能在 load() 中使用 null 或空字符串。在您的情况下,如果 string/url 源为空,则 if 语句可以覆盖您可以加载占位符:
if (url == null || url.isEmpty()) {
Picasso.with(context).load(placeholder).transform(transformation).into(this)
} else {
Picasso.with(context).load(url).error(placeholder).transform(transformation)
.placeholder(placeholder).into(this)
}
另一种选择可能是保持您的 if 语句不变,但将其添加到 else 语句中:
else
image_fourth.setImageResources(R.mipmap.ic_launcher);
我在 Glide 中使用过类似的技术。那对我有用。有关详细信息,您可以查看此 Whosebug 答案:
只需在语句之间切换并检查它是否有效?
if (image_fourth == null || image_fourth == ""){
//write your else statement here
}else{
//And if code is here
}
使用Glide而不是Picasso,那么你不需要添加任何其他条件或代码来检查字符串是否为空,
检查此示例
Glide.with(activity_context)
.load(your_url)
.placeholder(R.drawable.default_image)
.error(R.drawable.default_image)
.override(200, 200)
.centerCrop()
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(mHolder.imgIcon);
您可以找到有关 Glide 的更多信息here
如果您想继续使用 Picasso,请尝试此代码,这可能对您有所帮助
if(!TextUtils.isEmpty(Url)) {
Picasso.with(activity).load(Url.replace(" ", "%20")).error(R.drawable.default_image).networkPolicy(NetworkPolicy.NO_CACHE)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into(imageView, new Callback() {
public void onSuccess() {
System.out.println(" 02062015:onSuccess");
}
@Override
public void onError() {
imageView.setImageResource(R.drawable.default_image);
System.out.println(" 02062015:onError");
}
});
}
我正在使用 Picasso 在我的 android App.I 中显示来自服务器的图像 App.I 有 5 张图像 URL (HTTP 格式)从服务器获取并将其存储在字符串中 value.If 我向 Picasso(.jpg 格式)发送正确的 link 它可以正确运行并在我的图像视图中显示我的图像,如果在(.pdf 格式)中发送错误的 link 它会在我的图像中显示错误查看,但是当我从我的服务器传递空值或空值到字符串时,我的应用程序崩溃它的 运行 if 语句首先即使它的值为 null 或空 else 语句不是 运行 我应该更新什么在我的代码中,如果我从服务器获取空值,我的图像视图应该显示并且错误和文本视图值应该被更改。
// 代码仅在我的 If/Else 开始处:
if (image_fourth != null && image_fourth != ""){
Picasso.get().load(image_fourth).resize(200, 200).placeholder(R.drawable.placeholder).error(R.drawable.error).into(image1);
image1.setVisibility(View.VISIBLE);
buttons.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (image_second == null){
image_2t.setText("Image Not Found");
image_2t.setVisibility(View.GONE);
}
else if (image_second != null){
Picasso.get().load(image_second).resize(200, 200).placeholder(R.drawable.placeholder).error(R.drawable.error).into(image2);
image2.setVisibility(View.VISIBLE);
image_2t.setText("Image 2");
image_2t.setVisibility(View.VISIBLE);
}
}
});
}
else{
image_1t.setText("Image Not Found");
}
您可以尝试反转 if/else 语句。据我所知,Picasso 不能在 load() 中使用 null 或空字符串。在您的情况下,如果 string/url 源为空,则 if 语句可以覆盖您可以加载占位符:
if (url == null || url.isEmpty()) {
Picasso.with(context).load(placeholder).transform(transformation).into(this)
} else {
Picasso.with(context).load(url).error(placeholder).transform(transformation)
.placeholder(placeholder).into(this)
}
另一种选择可能是保持您的 if 语句不变,但将其添加到 else 语句中:
else
image_fourth.setImageResources(R.mipmap.ic_launcher);
我在 Glide 中使用过类似的技术。那对我有用。有关详细信息,您可以查看此 Whosebug 答案:
只需在语句之间切换并检查它是否有效?
if (image_fourth == null || image_fourth == ""){
//write your else statement here
}else{
//And if code is here
}
使用Glide而不是Picasso,那么你不需要添加任何其他条件或代码来检查字符串是否为空, 检查此示例
Glide.with(activity_context)
.load(your_url)
.placeholder(R.drawable.default_image)
.error(R.drawable.default_image)
.override(200, 200)
.centerCrop()
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(mHolder.imgIcon);
您可以找到有关 Glide 的更多信息here
如果您想继续使用 Picasso,请尝试此代码,这可能对您有所帮助
if(!TextUtils.isEmpty(Url)) {
Picasso.with(activity).load(Url.replace(" ", "%20")).error(R.drawable.default_image).networkPolicy(NetworkPolicy.NO_CACHE)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into(imageView, new Callback() {
public void onSuccess() {
System.out.println(" 02062015:onSuccess");
}
@Override
public void onError() {
imageView.setImageResource(R.drawable.default_image);
System.out.println(" 02062015:onError");
}
});
}