![](/img/trans.png)
[英]Android - picasso shows only placeholder, not the image from URL
[英]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.