Android - téléchargement de l'image à partir du web, l'enregistrement dans la mémoire interne de l'emplacement privé sur l'app, l'affichage de l'élément de liste
Ce que je suis en train de faire est ceci: je veux que mon application à télécharger une image à partir d'Internet et l'enregistrer sur la mémoire interne du téléphone dans un endroit qui est privé de l'application. Si il n'y a pas d'image disponible pour l'élément de la liste (c'est à dire qu'il ne peut pas être trouvé sur l'Internet), je veux, par défaut, une image d'espace réservé à l'affichage. C'est l'image que j'ai définie dans mon list_item_row.xml fichier en tant que par défaut.
Dans mon ListActivity fichier, je fais appel à une instance d'un CustomCursorAdapter classe que j'ai écrit. C'est dans CustomCursorAdapter où je suis une itération à travers tous les éléments de la liste et la définition de ce contenu doit être mappé à la vue, y compris le fichier de l'image en essayant de lire à partir de la mémoire interne.
J'ai vu plusieurs questions sur ce sujet, mais les exemples sont spécifiques à l'externe de la mémoire du téléphone (par exemple SDCard), impliquent que l'économie des chaînes au lieu d'images, ou implique l'utilisation de Bitmap.CompressFormat de réduire la résolution du fichier (ce qui est inutile dans mon cas, comme ces images de petites vignettes de déjà-petite résolution). Essayant de code de chaque exemple a été difficile, d'où ma demande sur mon exemple précis.
En ce moment, je crois que j'ai écrit le code est valide, mais aucune image n'est l'affichage de ma liste d'éléments, y compris la valeur par défaut de l'espace réservé d'image. Je ne sais pas si le problème est causé par les invalides télécharger/enregistrer le code, ou invalide lire le code - cela n'aide pas que je ne sais pas comment faire pour vérifier la mémoire interne pour voir si l'image existe.
De toute façon, voici mon code. Toute aide serait grandement appréciée.
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;
}
}
OriginalL'auteur Keeb13r | 2010-11-15
Vous devez vous connecter pour publier un commentaire.
il semble que certains de code est à gauche, je l'ai ré-écrit comme ceci:
ProductUtils.java
Ressemble à l'erreur que je reçois est: "java.io.IOException: Est un répertoire". Je ne sais pas quoi penser, car je pensais que le simple fait de spécifier le nom du fichier sans l'introduction de tout intervenant dossiers entraînerait l'écriture et de la lecture chemin exactement de la même.
Hum, ne productID contient une barre oblique (
/
)?Non, il ne peut contenir que des chiffres et parfois, un X pour représenter un 10. Est-il possible, je suis pas en train de lire le fichier à partir de l'emplacement approprié, c'est à dire quand je l'appelle decodeFile(), j'ai besoin de lui indiquer le chemin où le fichier sera?
Écrire pour le journal de sorte que vous êtes sûr que vous avez d'écrire et de lire le même fichier?
OriginalL'auteur dacwe
Ressemble tout simplement en se référant à l'image de nom de fichier lorsque vous essayez de lire qu'il n'était pas assez, et j'ai dû appeler getFilesDir() pour obtenir le chemin d'accès du fichier de stockage. Ci-dessous le code que j'ai utilisé:
A l'origine, je n'étais pas au courant que quelque chose de plus que le nom de fichier est nécessaire, et je pensais que la demande a été auto-connaître le chemin où le fichier serait.
OriginalL'auteur Keeb13r
OriginalL'auteur Yuvraj Kakkar