Android 毕加索图书馆,安卓:使用错误监听器
我正在玩弄毕加索图书馆来加载图像,但我遇到了一个问题。当图像加载失败时,我希望隐藏视图,而不是在默认图像中加载。我从源代码中注意到,添加侦听器的唯一方法似乎是从构建器中,但是当图像加载失败时,不会调用error方法。有人有这方面的经验吗Android 毕加索图书馆,安卓:使用错误监听器,android,listener,Android,Listener,我正在玩弄毕加索图书馆来加载图像,但我遇到了一个问题。当图像加载失败时,我希望隐藏视图,而不是在默认图像中加载。我从源代码中注意到,添加侦听器的唯一方法似乎是从构建器中,但是当图像加载失败时,不会调用error方法。有人有这方面的经验吗 iv = (ImageView) findViewById(R.id.imageView); Picasso.Builder builder = new Picasso.Builder(getApplicationContext());
iv = (ImageView) findViewById(R.id.imageView);
Picasso.Builder builder = new Picasso.Builder(getApplicationContext());
builder.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso arg0, String arg1) {
Log.e("Picasso Error", "Errored out, hiding view");
iv.setVisibility(View.GONE);
}
});
Picasso pic = builder.build();
pic.load("thisshouldbreak.jpg").into(iv);
毕加索2.0允许您将回调附加到请求中 您正在使用的回调用于“全局”侦听器,它可以帮助您调试可能由于网络负载而发生的错误 使用
load(url).into(view,newcallback(){…})毕加索2.0中的代码>
如果您使用的是回调
只是一个建议,请记住调用取消请求(目标)
,但如果您创建一个“空”png文件并将其设置为res文件夹中的默认图像文件,则可能会避免编程中出现问题。。。我知道有点傻。。。但可能在不打架的情况下工作…我的例子:
Picasso picasso = new Picasso.Builder(parent.getContext())
.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
//Here your log
}
})
.build();
picasso.load(shopModel.getShopImg())
.fit()
.into(viewHolder.shopImg);
我的答覆是:
File file = new File(filePath);
Picasso.with(context).load(file).placeholder(R.drawable.draw_detailed_view_display).error(R.drawable.draw_detailed_view_display)
.resize(400, 400).into(mImageView, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
mImageView.setVisibility(View.GONE);
}
});
您可以尝试添加“全局”侦听器
// create Picasso.Builder object
Picasso.Builder picassoBuilder = new Picasso.Builder(this);
picassoBuilder.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
Log.e("PICASSO", uri.toString(), exception);
}
});
// Picasso.Builder creates the Picasso object to do the actual requests
Picasso picasso = picassoBuilder.build();
try {
Picasso.setSingletonInstance(picasso);
} catch (IllegalStateException ignored) {
// Picasso instance was already set
// cannot set it after Picasso.with(Context) was already in use
}
任何后续调用Picasso.with(Context Context)
都将返回连接到侦听器的实例,因此所有失败都将被记录
请注意,您需要尽快调用setSingletonInstance
,例如在应用程序onCreate
中
这里采用的p.S.代码-当我们得到错误时,错误会转到onError方法,然后我们处理它
private void getAvatar(){
Picasso.with(this)
.load(Links.GET_AVATAR + ".jpg")
.into(imgUserAvatar, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
imgUserAvatar.setImageResource(R.drawable.icon_profile_default);
}
});
}
我怎样才能得到毕加索2.0?我只看到1.1.1。手动获取源代码并构建jar。官方即将发布。@howettl gethere@dnkoutso加载时如何使用进度条?问题是OneError没有提供有关错误的信息。而且,我的onImageLoadFailed从未像问题所说的那样被调用。这不是一种实用的方式。当然,在某些情况下,如果图像url不是有效的格式,这是一个很好的建议。但是如果某个url是1呢//cdn.bla2.com/sample.png 2。png在这种情况下,它的错误,因为只有前缀,所以它很好地检查这个错误,以及它的工作,但感谢花时间投票否决埃米尔。。。提供解决方案的意义在于,该解决方案通过emil。。。你可能想看看日期。。。在《毕加索2》出版之前我解决了他的问题。。。当然,更年轻的答案取决于它…嗨,谢谢你的支持,似乎对代码多解释一点会更有帮助谢谢!这也允许我使用自定义的okhttpclient,使用自签名证书。你参加聚会有点晚了:P这是4年前onError出现之前的事。