web-dev-qa-db-ja.com

ピカソを使用してFirebaseStorageからInfowindowのImageViewに画像を読み込むと、ピカソはプレースホルダーのみを表示します

ピカソを使用してFirebaseStorageから、マーカーからInfoWindowAdapterに配置されているImageviewに画像を読み込もうとしています。

私はそれについて非常に必死です。問題は、ピカソがプレースホルダーアイコンしか表示しないことです。

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は有効で、正常に動作します。今、私はこのdownloadUriをピカソに使用しています。

 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で見つけた answer を参照して、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メッセージを追加して、呼び出されたかどうかを追跡していることがわかります。ただし、Log.dメッセージがLogCatに表示されないため、onSucessメソッドはいつでも呼び出されないようです。

また、ピカソを有効にしても、例外、エラー、失敗、ログは表示されません。

picasso.setLoggingEnabled(true);

発生する唯一のことは、情報ウィンドウのImageViewにプレースホルダーが表示されることです。

画像サイズが大きすぎて読み込めないのではないかと思いましたが、読み込もうとした画像は652.86KBしかありません。

PS:Picassoは、キャッシュの動作をデバッグするためのリボンも左隅に表示しません。私は次のようにアクティブ化しようとします:

picasso.setIndicatorsEnabled(true);

Picasso2.5.2を使用しています。ピカソがログやリボンを表示しない場合、何が間違っているのか、これをデバッグする方法がわかりません。誰かが私を助けてくれることを願っています。私はこの機能がとても必要です。

補遺:これを参照して、権限も確認しました post 、OKです。

 <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にログが表示されました。ログは再び消えますが、今回は再起動しても効果がなく、ログは再表示されません。

しかし、私はまた、いくつかの調査を行い、私の問題を参照する別の answer を見つけました。

だから私は自分のコードを変更しましたが、それは役に立ちません。問題はまだ同じです。ピカソはプレースホルダーのみを表示します。

6
worl44

一度に全部やってみませんか? 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
    }
});
7
danielrosero

Kotlin拡張関数を使用してTask<Uri>受信者として:

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