使用Picasso将Firebase存储中的图像加载到Infowindow中的ImageView,Picasso仅显示占位符

wor*_*l44 5 android firebase picasso firebase-storage

我尝试将带有Picasso的Firebase存储中的图像加载到一个Imageview中,该Imageview放置在Marker的InfoWindowAdapter中.

我非常绝望.问题是Picasso只显示占位符Icon.

我的代码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());
     }
 });
Run Code Online (Sandbox Code Playgroud)

我得到的downloadUri是有效的,工作正常.现在我使用这个下载Uri for Picasso.

 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));
Run Code Online (Sandbox Code Playgroud)

参考我在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();

    }
}}
Run Code Online (Sandbox Code Playgroud)

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

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

picasso.setLoggingEnabled(true);
Run Code Online (Sandbox Code Playgroud)

唯一发生的事情是Infowindow中的ImageView显示占位符.

我想也许是因为图像尺寸太大而无法加载,但我尝试加载的图像只有652.86 KB.

PS:Picasso也没有显示左角的色带来调试缓存行为.我尝试激活:

picasso.setIndicatorsEnabled(true);
Run Code Online (Sandbox Code Playgroud)

我使用Picasso 2.5.2.如果Picasso没有显示日志和色带,我不知道我做错了什么或如何调试它.我希望有一个人可以帮助我.我非常需要这个功能.

附录:我也检查了权限,参考这篇文章,他们没问题.

 <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" />
Run Code Online (Sandbox Code Playgroud)

更新

经过一些反复试验后,我发现Picasso显示了日志,但我没有在logcat中看到它.重新启动手机后,我在一段时间后看到了logcat中的日志.日志再次消失,但这次即使重启也没有帮助,日志不再出现.

但我也做了一些研究,找到了另一个提到我问题的答案.

所以我改变了我的代码,但它没有帮助.问题仍然存在.毕加索只展示了占位符.

dan*_*ero 5

你为什么不一次做所有事情?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
    }
});
Run Code Online (Sandbox Code Playgroud)