Quello che sto cercando di fare è questo: io voglio la mia applicazione per scaricare un'immagine da Internet e salvarlo al memoria interna del telefono in una posizione privata dell'applicazione. Se non è disponibile alcuna immagine per la voce dell'elenco (ovvero non può essere trovata su Internet), voglio un'immagine di segnaposto predefinita da visualizzare. Questa è l'immagine che ho definito nel mio file list_item_row.xml come predefinita.Android - il download di immagini dal web, il salvataggio in memoria interna in posizione riservata alla app, esposizione per la voce di elenco
Nel mio file ListActivity, che io chiamo un'istanza di una classe CustomCursorAdapter ho scritto. È in CustomCursorAdapter in cui sto iterando attraverso tutte le voci dell'elenco e definendo quale contenuto deve essere mappato alle viste, incluso il file immagine cercando di leggerlo dalla memoria interna.
Ho visto diverse domande su questo argomento, ma gli esempi sono specifici della memoria del telefono esterno (ad es. SDCard), comportano il salvataggio di stringhe invece di immagini o implicano l'uso di Bitmap.CompressFormat per ridurre la risoluzione del file (che non è necessario nel mio caso, poiché queste immagini saranno piccole miniature di risoluzione già piccola). Cercando di mettere insieme il codice di ogni esempio è stato difficile, quindi la mia domanda sul mio esempio specifico.
Al momento, credo che ho scritto codice valido, ma nessuna immagine è la visualizzazione per le mie voci di elenco, tra cui l'immagine predefinita segnaposto. Non so se il problema è causato da un codice di download/salvataggio non valido o da un codice di lettura non valido: non è di aiuto sapere che non so come controllare la memoria interna per vedere se l'immagine esiste.
In ogni caso, ecco il mio codice. Qualsiasi aiuto sarebbe molto apprezzato.
ProductUtils.java
public static String productLookup(String productID, Context c) throws IOException {
URL url = new URL("http://www.samplewebsite.com/" + productID + ".jpg");
URLConnection connection = url.openConnection();
InputStream input = connection.getInputStream();
FileOutputStream output =
c.openFileOutput(productID + "-thumbnail.jpg", Context.MODE_PRIVATE);
byte[] data = new byte[1024];
output.write(data);
output.flush();
output.close();
input.close();
}
CustomCursorAdapter.java
public class CustomCursorAdapter extends CursorAdapter {
public CustomCursorAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ImageView thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
String fileName =
cursor.getString(cursor.getColumnIndex(DbAdapter.KEY_IMAGE_FILE_PATH));
Bitmap bMap = BitmapFactory.decodeFile(fileName);
thumbnail.setImageBitmap(bMap);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.list_item_row, parent, false);
bindView(v, context, cursor);
return v;
}
}
Quindi la mia domanda era valida: "Scrivi nel log in modo da essere sicuro di aver scritto e letto lo stesso file?". – dacwe
Originariamente, non ero a conoscenza del fatto che fosse necessario qualcosa di più del nome del file e pensavo che l'applicazione fosse consapevole del percorso specifico in cui si trovava il file. – Keeb13r