2016-10-06 13 views
4

イメージベースのストレージからピカソを使用して、MarkerからInfoWindowAdapterに配置されたイメージビューにイメージをロードしようとします。イメージをFirebaseストレージからピカソでInfowindowのイメージビューにロードすると、ピカソはプレースホルダのみを表示します

私はそれについて非常に切望しています。問題はPicassoがプレースホルダーアイコンのみを表示することです。

FirebaseStorageRefernceのための私のコードは、このFirebase Blog postを参照する次のようになります。

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が有効で、正常に動作します。今私はPicasaのためにこのdownloadUriを使用します。私はStackOverflowの上ここで見つけるanswerを参照する

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)); 

、私は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では、例外を設定しても例外、エラー、失敗、ログは表示されません。

picasso.setLoggingEnabled(true); 

InfowindowのImageViewがプレースホルダを表示するということだけが起こります。

イメージサイズが大きすぎて読み込めないと思うかもしれませんが、ロードしようとするイメージは652.86 KBにすぎません。

PS:ピカソは、キャッシュ動作をデバッグするために左隅にリボンを表示しません。私は以下のもので活性化しようとします:

picasso.setIndicatorsEnabled(true); 

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

補足: また、このpostを参照して、アクセス許可をチェックしても問題ありません。

<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が自分の問題を参照していることを発見しました。

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

答えて

3

一度にすべてをやってみませんか?

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 
    } 
}); 
0

受信機としてTask<Uri>にKotlin拡張機能を使用する:

fun Task<Uri>.loadIntoPicasso(imageView: ImageView){ 
    addOnSuccessListener { Picasso.with(imageView.context).load(it).into(imageView) } 
} 
FirebaseストレージgetDownloadUrl()メソッド内
関連する問題