L'affichage d'une image bitmap dans imageview par simple adaptateur
J'obtiens une image à partir d'une url. Je suis à l'aide de imageview dans la listview. Je veux ajouter la liste des images bitmap pour chaque ligne de l'élément de la liste. J'ai utilisé SimpleAdapter mais l'imageview montre vide.Mon code est ci-dessous !!
ArrayList<HashMap<String, Bitmap>> mylist = new ArrayList<HashMap<String, Bitmap>>();
Bundle bundle = this.getIntent().getExtras();
get = bundle.getString("name");
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.propertyhookup.com/mobile/propertylist.php");
nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("zipcode", get.trim()));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
if(result.length()<= 7){
Toast.makeText(getApplicationContext(), "No properties for this zipcode or check your zipcode ", Toast.LENGTH_LONG).show();
//text.setText("No properties for this zipcode or check your zipcode");
}
else{
try{
jArray = new JSONObject(result);
}catch(JSONException e){
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
//JSONObject json = JSONfunctions.getJSONfromURL("http://192.168.1.111/propertyhookup.com/mobile/propertylist.php");
try{
JSONArray earthquakes = jArray.getJSONArray("earthquakes");
for(int i=0;i<10;i++){
map = new HashMap<String, Bitmap>();
//HashMap<String, Drawable> map1 = new HashMap<String, Drawable>();
JSONObject e = earthquakes.getJSONObject(i);
if(e.getString("property_type").contains("1")) {
proptype ="Single Family Home";
}else if(e.getString("property_type").contains("2")) {
proptype="Condo";
}else if(e.getString("property_type").contains("3")) {
proptype="Townhouse";
}
if(e.getString("estimated_price").contains("0")) {
estimate = "Not Enough Market Value";
//estimat = (TextView) findViewById(R.id.estimat);
//estimat.setTextColor(Color.rgb(0, 0, 23));
}else {
estimate = "$"+e.getString("estimated_price");
}
photo = e.getString("photo1");
drawable = LoadImageFromWebOperations(photo);
//text.setImageDrawable(d);
try
{
aURL = new URL(photo);
}
catch (MalformedURLException e1)
{
//TODO Auto-generated catch block
e1.printStackTrace();
}
URLConnection conn = null;
try
{
conn = aURL.openConnection();
}
catch (IOException e1)
{
//TODO Auto-generated catch block
e1.printStackTrace();
}
try
{
conn.connect();
}
catch (IOException e1)
{
//TODO Auto-generated catch block
e1.printStackTrace();
}
InputStream is = null;
try
{
is = conn.getInputStream();
}
catch (IOException e1)
{
//TODO Auto-generated catch block
e1.printStackTrace();
}
BufferedInputStream bis = new
BufferedInputStream(is,8*1024);
Bitmap bm = BitmapFactory.decodeStream(bis);
map.put(photos, bm);
mylist.add(map);
}
}catch(JSONException e) {
Toast.makeText(getApplicationContext(),e.getMessage(), Toast.LENGTH_LONG).show();
}
SimpleAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main4,
new String[] { "percent","propertyid", "cityname", "statecode", "propertytype", "footage", "bathroom", "bedroom", "price", "estimated", "photos" },
new int[] { R.id.percent, R.id.property_id, R.id.city_name, R.id.state_code, R.id.prop_type, R.id.foot, R.id.bath, R.id.bed, R.id.list, R.id.estimat, R.id.image});
setListAdapter(adapter);
OriginalL'auteur Santhosh_pulliman | 2011-06-13
Vous devez vous connecter pour publier un commentaire.
je pense que c'est parce que vous êtes le téléchargement de l'image à partir du web et vous avez besoin de ces dans ASYNC voir indolore thrething télécharger l'image et après que l'actualisation juste le imageviews.
OriginalL'auteur PedroAGSantos
Fondamentalement la simple adaptateur se lier automatiquement certains ressource id ou l'URI de l'imageview de votre ligne de mise en page.
Mais il ne prennent pas en charge le format Bitmap.
C'est un problème, parce que tous ceux qui ont eu à gérer bitmap sais que nous avons souvent à réduire la taille de l'image pour éviter outOfMemory exceptions.
Mais si vous voulez ajouter des images dans une liste, vous ne pouvez pas réduire la taille de votre image, si vous avez seulement fournir de l'URI. Voici donc la solution :
J'ai modifié le simpleAdapter pour être en mesure de gérer bitmap.
Ajouter cette classe dans votre projet, et de l'utiliser à la place de simpleAdapter.
Alors au lieu de passer d'un URI ou un ressourceId pour une image, passer d'une image Bitmap !
Est ci-dessous le code :
Cette classe se comportent exactement comme la classe d'origine (SimpleAdapter)
Merci pour le contributon. Un conseil: votre constructeur ne correspond pas SimpleAdapter. De cette façon, nous ne pouvons pas changer SimpleAdapter à ExtendedSimpleAdapter dans un code existant. Vous pouvez l'améliorer. (par exemple: pour moi, j'avais besoin de changer de constructeur à partir de la Liste<HashMap><Map> de sorte qu'il pourrait travailler)
Bonjour Leonardo. Vous êtes de droite et de bienvenue. Je vais changer dans ma réponse la Liste de code<HashMap<String, Object> avec la Liste de code<? s'étend Map<String, ?>> comme je l'ai juste vu dans l'Android L SimpleAdapter source. subash, désolé je n'ai pas vu votre question plus tôt, dites-moi si je peux être d'une aide quelconque.
Puisque ça fait un an que j'ai quitté la Android/Java monde, je ne suis pas sûr que les modifications que j'ai faite de compiler. Il devrait, mais si quelqu'un peut me confirmer que cette nouvelle version de mon code fonctionne, j'apprécierais.
comment utiliser cette classe avec listview?
OriginalL'auteur pintaf
La meilleure façon de le faire est de créer une classe qui étend la classe BaseAdapter et puis instancier un async tâche pour chaque image (sur le post exécuter ensemble de l'image bitmap à la correpondent imageView). Voici une fonction simple de télécharger une image à partir du web:
Est R. id.l'image d'une ImageView? Essayez ceci:
code
SimpleAdapter carte = new SimpleAdapter(ce, maliste , R. layout.main4, new String[] { "%","propertyid", "cityname", "statecode", "propertytype", "séquences", "salle de bains", "chambre à coucher", "prix", "estime", "photos" }, new int[] { R. id.pour cent, R. id.property_id, R. id.city_name, R. id.state_code, R. id.prop_type, R. id.pied, R. id.salle de bain, R. id.lit, R. id.liste, R. id.épaisseur}); setListAdapter(adaptateur);code
Les N premières vues "à" liste sont données les valeurs des N premières colonnes dans le "de" en paramètre.Ya le droit.. R. id.l'image est une ImageView.Mais comment faire de votre code du travail pour moi? U ne pas déclarer l'id de l'ImageView dans SimpleAdapter.
Comme vous pouvez le voir ici: lien vous avez juste besoin de déclarer la textViews. Mais pourquoi ne pas créer une classe qui étend la classe BaseAdapter? lien Mais au lieu d'utiliser un tableau avec l'image Id que vous pouvez appeler un async tâche et ne
i.setImageBitmap(image)
sur le post exécuter.OriginalL'auteur Tiago Babo