Android: Afficher l'image en imageview par SimpleAdapter
Je suis nouveau android maintenant, je veux afficher une image à partir d'une url. Je suis à l'aide de imageview dans la listview. Je veux ajouter à la liste d'images dans la chaque ligne de l'élément de la liste. J'ai utilisé SimpleAdapter mais l'imageview montre vide.
Voici la principale activité:
package com.example.mysqltest;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class ReadComments extends ListActivity {
//Progress Dialog
private ProgressDialog pDialog;
//testing on Emulator:
private static final String READ_COMMENTS_URL = "http://192.168.30.198/test/webservice/comments.php";
//JSON IDS:
private static final String TAG_SUCCESS = "success";
private static final String TAG_TITLE = "title";
private static final String TAG_POSTS = "posts";
private static final String TAG_POST_ID = "post_id";
private static final String TAG_USERNAME = "username";
private static final String TAG_MESSAGE = "message";
private static final String TAG_IMAGE = "image";
//An array of all of our comments
private JSONArray mComments = null;
//manages all of our comments in a list.
private ArrayList<HashMap<String, String>> mCommentList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//note that use read_comments.xml instead of our single_post.xml
setContentView(R.layout.read_comments);
}
@Override
protected void onResume() {
//TODO Auto-generated method stub
super.onResume();
//loading the comments via AsyncTask
new LoadComments().execute();
}
public void addComment(View v) {
Intent i = new Intent(ReadComments.this, AddComment.class);
startActivity(i);
}
/**
* Retrieves recent post data from the server.
*/
public void updateJSONdata() {
mCommentList = new ArrayList<HashMap<String, String>>();
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(READ_COMMENTS_URL);
try {
mComments = json.getJSONArray(TAG_POSTS);
for (int i = 0; i < mComments.length(); i++) {
JSONObject c = mComments.getJSONObject(i);
//gets the content of each tag
String title = c.getString(TAG_TITLE);
String content = c.getString(TAG_MESSAGE);
String username = c.getString(TAG_USERNAME);
String image = c.getString(TAG_IMAGE);
//creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_TITLE, title);
map.put(TAG_MESSAGE, content);
map.put(TAG_USERNAME, username);
map.put(TAG_IMAGE, image);
//adding HashList to ArrayList
mCommentList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
/**
* Inserts the parsed data into the listview.
*/
private void updateList() {
ListAdapter adapter = new SimpleAdapter(this, mCommentList,
R.layout.single_post, new String[] { TAG_TITLE, TAG_MESSAGE,
TAG_USERNAME,TAG_IMAGE }, new int[] { R.id.title, R.id.message,
R.id.username, R.id.imageView1 });
//I shouldn't have to comment on this one:
setListAdapter(adapter);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {}
});
}
public class LoadComments extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ReadComments.this);
pDialog.setMessage("Loading Comments...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected Boolean doInBackground(Void... arg0) {
updateJSONdata();
return null;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
pDialog.dismiss();
updateList();
}
}
}
SimpleAdapter.setViewImage travaille avec les ressources du système, et non pas avec les ressources du réseau. Vous devez télécharger l'image réseau et de l'ensemble de l'image bitmap explicitement à l'ImageView. Vous pouvez essayer ce répondre.
Merci pour votre commentaire. pourriez-vous m'aider comment appliquer setViewImage dans mon code?
Bonjour @VuthySok U il?
Voir mon édité répondre
Merci pour votre commentaire. pourriez-vous m'aider comment appliquer setViewImage dans mon code?
Bonjour @VuthySok U il?
Voir mon édité répondre
OriginalL'auteur Vuthy Sok | 2014-06-02
Vous devez vous connecter pour publier un commentaire.
D'accord. Donc je suppose ici que vous insistez sur l'utilisation de
SimpleAdapter
. Pas de problème, le problème est résolu, il suffit de suivre les étapes suivantes:D'abord, permet de créer sur mesure row.xml pour notre
ListView
qui se composent de seulement unImageView
.(Vous pouvez ajouter ce que vous voulez pour plus tard, mais maintenant, je vais supposer que vous ne voulez charger leImageView
)Deuxième permet de créer notre personnalisé
SimpleAdapter
Troisième permet de créer notre
DownloadTask
, cette classe va télécharger l'image:Maintenant la
DownloadTask
est utilisé à partir de l'intérieur de la getView() dansSimpleAdapter
Quatrième permet d'exécuter notre incroyable de petites projet à partir de notre MainActivity.java
Avez-vous d'ajouter le internet autorisation dans le fichier manifeste ? Il ne doit pas fermer. Essayez d'ajouter l'autorisation, si elle ne fonctionne pas, je vais vous envoyer mon échantillon. Mais je vous suggère de nous dire quelles sont les erreurs survenant dans le logcat
oui je l'ai fait ajouter la permission <uses-permission android:name="android.la permission.INTERNET"/>. Je ne suis pas sûr que le problème mais j'ai ouvert des applications de toujours afficher un message "Malheureusement, Mon SimpleAdapter a arrêté".
C'est le projet partagé: docs.google.com/...
OriginalL'auteur Alan Deep
Vous pouvez utiliser n'importe quelle image cache de la bibliothèque. Exemple, Picasa, Image Universelle De Chargeur..
Vous pouvez mettre en cache les images à partir de l'URL et puis vous pouvez utiliser les images dans votre application.
Vous pouvez trouver les bibliothèques dans les liens suivants
http://square.github.io/picasso/ et https://github.com/nostra13/Android-Universal-Image-Loader
OriginalL'auteur Sripathi
Vous pouvez utiliser plusieurs threads à télécharger et à décoder l'image .veuillez suivre ce site et essayer d'apprendre comment Développeur android utiliser le pool de thread exécuteur pour exécuter les différentes images dans le fil de discussion.
http://developer.android.com/training/multiple-threads/create-threadpool.html
OriginalL'auteur mcd
1) Pour régler l'image de l'Uri de l'ImageView vous pouvez utiliser un ViewBinder
Vous devez implémenter la classe abstraite et remplacer
setViewValue
2) Vous pouvez utiliser Picasso pour charger les images dans un thread d'arrière-plan et les mettre en cache.
Le
setViewValue
méthode devrait ressembler à ceci:Vous revenez
true
si vous voulez prendre soin de la liaison. Vous revenezfalse
pour le comportement par défaut.3) Définir votre
adapter
d'utiliser leViewBinder
en appelantadapter.setViewBinder(ViewBinder);
OriginalL'auteur LordRaydenMK
pour l'instant, ma suggestion pour vous est la suivante:
1. télécharger l'image à partir de l'url
2. enregistrer en tant que drawable dans le stockage
3. définir cette dessiné à l'image src de l'imageview
(Je ne vous vois pas faire cette partie du travail à partir de votre code...)
OriginalL'auteur shanwu
Ce tutoriel est le meilleur exemple pour analyser l'image à l'aide de json l'analyse et de l'afficher dans une liste: http://www.androidbegin.com/tutorial/android-json-parse-images-and-texts-tutorial/
Quelques autres:
http://imagelistviewdynamic.blogspot.in/2012/12/image-parsed-from-json-using-async-into.html
http://www.java2s.com/Open-Source/Android_Free_Code/JSON/Download_Free_code_Android_JSON_Parse_Images_and_Texts_Tutorial.htm
OriginalL'auteur kgandroid
Je vous suggère d'utiliser Image Universelle De Chargeur, il utilise asynchrone image le téléchargement, la mise en cache et de l'affichage, vous pouvez y trouver des exemples de la façon de la mettre en œuvre. Après vous le faites, vous n'avez pas à l'inquiétude sur le nombre d'images, ou de sa taille.
Si vous téléchargez le projet, vous trouverez cet exemple qui fait tout le travail que vous voulez:
OriginalL'auteur Ultimo_m