Volley - NetworkImageView manchmal nicht zeigen, das Fehler Bild?
Also habe ich beschlossen, zu versuchen, die neue Volley-Bibliothek, wie gezeigt, auf Google IO 2013.
Ich habe es ausprobiert während der Verwendung des einfachen Lösung NetworkImageView
zeigen mehrere Bilder auf einer GridView
.
Es funktioniert sehr erfreulich und zeigt die Bilder, aber wenn ich lassen Sie es laden Sie die Bilder und dann habe ich schalten Sie die WLAN während dem herunterladen, es nicht zeigen, ein Fehler, wie wenn alles noch lädt. Nicht nur das, aber wenn ich die Verbindung wiederherzustellen, es nicht wieder die Belastung.
Warum funktioniert es, und wie kann ich es beheben? Vielleicht ist es tatsächlich ein bug?
Hier ist mein Beispiel code, wenn jemand will, um es auszuprobieren (BitmapCacheLru
code hier):
public class MainActivity extends Activity {
private static final int COLUMNS_COUNT = 4;
private RequestQueue _requestQueue;
private ImageLoader _imageLoader;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_requestQueue=Volley.newRequestQueue(this);
_imageLoader=new ImageLoader(_requestQueue, new BitmapLruCache());
final GridView gridView = new GridView(this);
gridView.setNumColumns(COLUMNS_COUNT);
final int screenWidth = getResources().getDisplayMetrics().widthPixels;
gridView.setAdapter(new BaseAdapter() {
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
NetworkImageView rootView = (NetworkImageView) convertView;
if (rootView == null) {
rootView = new NetworkImageView(MainActivity.this);
rootView.setLayoutParams(new AbsListView.LayoutParams(screenWidth / COLUMNS_COUNT, screenWidth / COLUMNS_COUNT));
rootView.setScaleType(ScaleType.CENTER_CROP);
rootView.setDefaultImageResId(android.R.drawable.sym_def_app_icon);
rootView.setErrorImageResId(android.R.drawable.ic_dialog_alert);
}
final String url = getItem(position);
rootView.setImageUrl(url, _imageLoader);
return rootView;
}
@Override
public long getItemId(final int position) {
return 0;
}
@Override
public String getItem(final int position) {
return Images.imageThumbUrls[position];
}
@Override
public int getCount() {
return Images.imageThumbUrls.length;
}
});
setContentView(gridView);
}
@Override
protected void onStop() {
_requestQueue.cancelAll(this);
super.onStop();
}
}
P. S. Wenn Sie möchten, um zu sehen, den code von NetworkImageView
ich denke, es ist verfügbar hier .
- Blick in die Logcat, gibt es irgendwelche Fehler/debug-Meldungen aus Volley, wenn Sie schalten Sie den Wi-Fi?
- eigentlich habe ich nicht überprüft. tut volley haben eine spezielle log-tag zu suchen?
- Ja, es ist "Volleyball", als man sich vorstellen kann 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das problem ist, dass der Volleyball nicht helfen, Sie neu zu laden Bild.
Eine kurze Inspektion zeigt, dass die NetworkImageView nur lädt Daten bei der onLayout-Methode aufgerufen, und die Methode loadImageIfNecessary wird in die Warteschlange im Netzwerk anfordern, wenn nötig.
Wenn es keine Internet-Verbindung, der Fehler callback wird aufgerufen und es ist keine weitere Aktion einmal das Internet selbst verbunden.
Allerdings, da haben Sie die NetworkImage in einer Liste, wenn Sie Blättern Sie durch die Liste, ich nehme an, Sie werden die Wiederverwendung der Zelle anzuzeigen, und rufen Sie setImageURL wieder. Wenn die Internet-Verbindung verfügbar ist, wird das Bild automatisch geladen. Alternativ, sobald die Internet-Verbindung aufgebaut ist, können Sie aktualisieren Sie die Liste anzeigen und so, dass das Bild automatisch geladen wird.