2015-06-25 2 views
0

я Тринга загрузки изображений и текстов в ListView с помощью arrayAdapter обычая, но изображение нагрузки обязательнонагрузка на заказ ArrayAdapter

вот мой arrayAdapter

public class CustomAdapter extends ArrayAdapter<Post> { 

    private ImageTask image; 

    public CustomAdapter(Context context, ArrayList<Post> posts) { 
     super(context, 0, posts); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Get the data item for this position 
     Post post = getItem(position);  
     // Check if an existing view is being reused, otherwise inflate the view 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.post_list, parent, false); 
     } 
     // Lookup view for data population 
     TextView tituloView = (TextView) convertView.findViewById(R.id.titulo); 
     TextView subtituloView = (TextView) convertView.findViewById(R.id.subTitulo); 
     ImageView fotoView = (ImageView) convertView.findViewById(R.id.imageView); 
     TextView textoView = (TextView) convertView.findViewById(R.id.texto); 


     // Populate the data into the template view using the data object 
     tituloView.setText(post.post_titulo); 
     subtituloView.setText(post.post_sub_titulo); 
     //this like idk if are the way corret for load the image into ViewImage specific 
     new ImageTask(fotoView).execute("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"); 

     textoView.setText(post.post_texto); 
     // Return the completed view to render on screen 
     return convertView; 
    } 
} 

здесь ImageTask изображение

public class ImageTask extends AsyncTask<String, Void, Bitmap> { 
    ImageView bmImage; 

    public ImageTask(ImageView bmImage) { 
     this.bmImage = bmImage; 
    } 

    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     Bitmap mIcon11 = null; 
     try { 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      mIcon11 = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return mIcon11; 
    } 

    protected void onPostExecute(Bitmap result) { 
     bmImage.setImageBitmap(result); 
    } 
} 

и здесь звонок от MainActivity

// Create the adapter to convert the array to views 
CustomAdapter adapter = new CustomAdapter(this, arrayOfPost); 
// Attach the adapter to a ListView 
ListView listView = (ListView) findViewById(R.id.lvUsers); 
listView.setAdapter(adapter); 

arrayOfPost приходит из синтаксического Jonson в ArrayList и ссылки изображения содержится, но в этом примере я, используя изображения от разработчика Google

и XML, используемый адаптером массива здесь

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

     <TextView 
      android:id="@+id/titulo" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

     <TextView 
      android:id="@+id/subTitulo" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:id="@+id/texto" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      /> 
</LinearLayout> 

кто-нибудь знает, что я неправ и как я должен делать для загрузки изображений? я не прав, если это путь Corret для загрузки изображения в конкретной ViewImage // эти строки в классе кулака отправил

new ImageTask(fotoView).execute("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"); 
+0

Что терпеть неудачу? – zdd

+0

изображение не входит в устройство, только тексты –

+0

вы должны добавить это в вопрос. – zdd

ответ

2

шаги, чтобы загрузить изображение в AsyncTask

Шаг 1:

ImageView fotoView = (ImageView) convertView.findViewById(R.id.imageView); 

Шаг 2:

String URL1 = "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"; 

Шаг 3:

fotoView.setTag(URL1); 
new DownloadImageTask.execute(fotoView); 

Шаг 4:

public class DownloadImagesTask extends AsyncTask<ImageView, Void, Bitmap> { 

ImageView imageView = null; 

@Override 
protected Bitmap doInBackground(ImageView... imageViews) { 
    this.imageView = imageViews[0]; 
    return download_Image((String)imageView.getTag()); 
} 

@Override 
protected void onPostExecute(Bitmap result) { 
    imageView.setImageBitmap(result); 
} 

private Bitmap download_Image(String url) { 

    Bitmap bmp =null; 
    try{ 
     URL ulrn = new URL(url); 
     HttpURLConnection con = (HttpURLConnection)ulrn.openConnection(); 
     InputStream is = con.getInputStream(); 
     bmp = BitmapFactory.decodeStream(is); 
     if (null != bmp) 
      return bmp; 

     }catch(Exception e){} 
    return bmp; 
} } 

Ссылка: Android : Loading an image from the Web with Asynctask

+0

славный брат именно сейчас это работает :) –

+0

Добро пожаловать! – ganeshvjy

1

Я вижу, что вы несколько вещей, которые могут быть улучшены в вашем коде:
1. в вашем пользовательском адаптере вы должны использовать ViewHolder, чтобы улучшить производительность ListView, потому что эти строки: convertView.findViewById() стоят слишком дорого.
2. Вы используете AsyncTask для загрузки изображения из Интернета в GetView(). Это нормально, но всякий раз, когда вы прокручиваете свой ListView, вызывается GetView(), и вы начинаете другой AsyncTask. Нет гарантии, что сначала будет завершен Task, поэтому ваша позиция изображения в ListView может быть неправильной (теперь вы загружаете одно и то же изображение в каждой строке, это не так, но в будущем это произойдет).
Поэтому мое предложение: использовать ViewHolder в адаптере, использовать некоторые 3 участника Lib, чтобы загрузить изображение эффективно, такие как Universal ImageLoader

+0

действительно работает и случиться, что сказать, действительно загружать медленно :), теперь будет искать libs ty для подсказок :) –

Смежные вопросы