簡體   English   中英

將Picasa從Firebase存儲中的圖像加載到Infowindow中的ImageView中,Picasso僅顯示占位符

[英]Load Image from Firebase Storage with Picasso to ImageView in Infowindow, Picasso only shows placeholder

我嘗試從Firebase存儲和Picasso將圖像加載到Imageview中,該Imageview從Marker放置在InfoWindowAdapter中。

我對此感到非常絕望。 問題是畢加索只顯示占位符圖標。

我的FirebaseStorageRefernce代碼類似於此Firebase Blog帖子

 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有效並且可以正常工作。 現在,我將這個downloadUri用於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));

參考我在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 Storage的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) }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM