加载图像从毕加索的Firebase存储到Infowindow的ImageView,毕加索只显示占位符

我尝试从带有Picasso的Firebase存储中将图像加载到ImageView中,该图像位于标记的InfoWindowAdapter中。

我非常绝望。 问题是毕加索只显示占位符图标。

我的FirebaseStorageRefernce代码看起来像是指这个Firebase博客帖子 :

  StorageReference load = getImage(id); load.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri uri) { downloadUri = uri; } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.e("Failure",e.toString()); } }); 

我得到的downloadUri是有效的,工作正常。 现在我使用这个下载UU为毕加索。

  Picasso picasso = new Picasso.Builder(getApplicationContext()).listener(new Picasso.Listener() { @Override public void onImageLoadFailed(Picasso picasso, Uri uri, Exception e) { e.printStackTrace(); } }).build(); picasso.setLoggingEnabled(true); picasso.load(downloadUri).placeholder(R.drawable.toxic_bait_icon).fit().into(thump, new MarkerCallback(marker)); 

参考我在StackOverFlow中找到的答案 ,我做了一个MarkerCallback类:

 public class MarkerCallback implements Callback { com.google.android.gms.maps.model.Marker marker = null; MarkerCallback(Marker marker) { this.marker = marker; } @Override public void onError(){ Log.e(getClass().getSimpleName(), "Error loading thumbnail!"); } @Override public void onSuccess(){ Log.d("onSuccess","Picasso Callback"); if(marker != null && marker.isInfoWindowShown()){ Log.d("onSuccess","Picasso Callback in if"); marker.hideInfoWindow(); marker.showInfoWindow(); } }} 

你可以看到我在onSuccess方法中添加了一些Log.d消息来跟踪它是否被调用。 但是看起来像onSucess方法不会随时调用,因为Log.d消息从不出现在LogCat中。

毕加索也没有显示任何异常,错误,失败,也没有日志,即使我启用它。

 picasso.setLoggingEnabled(true); 

唯一发生的是Infowindow中的ImageView显示占位符。

我想也许是因为图像大小太大,但我试图加载的图像只有652.86 KB。

PS:毕加索也没有显示在左边的功能区来调试缓存行为。 我尝试激活:

 picasso.setIndicatorsEnabled(true); 

我使用毕加索2.5.2。 我不知道我做错了什么,或者如果毕加索不显示日志和色带,如何调试。 我希望有人能帮助我。 我非常需要这个功能。

附录:我也检查了权限,提到这个帖子 ,他们都没事。

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

更新

经过一番反复试验,我发现毕加索显示日志,但我没有看到它在logcat。 重新启动手机后,我看了一会儿之后在logcat中登录。 日志再次消失,但是这次即使重新启动也没有帮助,日志不会重新出现。

但是我也做了一些研究,发现了另一个涉及我的问题的答案 。

所以我改变了我的代码,但没有帮助。 问题仍然是一样的。 毕加索只显示占位符。

你为什么不一次做所有事情? Firebase存储内getDownloadUrl()方法:

  StorageReference load = getImage(id); load.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri uri) { // Got the download URL for 'users/me/profile.png' // Pass it to Picasso to download, show in ImageView and caching Picasso.with(context).load(uri.toString()).into(imageView); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } }); 

将Kotlin扩展函数用作Task<Uri>作为接收者:

 fun Task<Uri>.loadIntoPicasso(imageView: ImageView){ addOnSuccessListener { Picasso.with(imageView.context).load(it).into(imageView) } }