2016-07-13 2 views
0

Уверен, это не новый вопрос. К сожалению, после борьбы за эту деятельность в течение 20 часов, я все еще не могу найти решение. Не могли бы вы дать мне руку помощи. Я буду очень признателен.Получить изображение из URL с AsyncTask

Эй, это мой вопрос. Я хотел бы показать изображение с разных URL-адресов на макет girdView. Однако мой код не работал, поэтому на экране ничего не отображается. Не могли бы вы, пожалуйста, помочь мне решить эту проблему?

Ниже мой MainActivity Класс

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String [] imgUrlList = { 
      "http://image.tmdb.org/t/p/w500/cGOPbv9wA5gEejkUN892JrveARt.jpg", 
      "http://image.tmdb.org/t/p/w500/6FxOPJ9Ysilpq0IgkrMJ7PubFhq.jpg", 
      "http://image.tmdb.org/t/p/w500/z09QAf8WbZncbitewNk6lKYMZsh.jpg", 
      "http://image.tmdb.org/t/p/w500/kqjL17yufvn9OVLyXYpvtyrFfak.jpg" 
    }; 


    mMovieAdapter = new MyAdapter(this, imgUrlList); 
    GridView gridview = (GridView) findViewById(R.id.gridView); 
    gridview.setAdapter(mMovieAdapter); 

} 

public class MyAdapter extends ArrayAdapter<String>{ 
    private final Activity context; 
    private final String[] imgUrlList; 

    public MyAdapter (Activity context, String[] imgUrlList){ 
     super(context, R.layout.image_item); 
     this.context = context; 
     this.imgUrlList = imgUrlList; 
    } 

    public View getView (int position, View view, ViewGroup parent){ 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rootView = inflater.inflate(R.layout.image_item, null, true); 

     new DownloadImageTask((ImageView) rootView.findViewById(R.id.imageItem)).execute(imgUrlList[position]); 
     ImageView imageView = (ImageView) rootView.findViewById(R.id.imageItem); 
     imageView.setImageURI(Uri.parse(imgUrlList[position])); 

     return rootView; 
    } 
} 

private class DownloadImageTask extends AsyncTask <String, Void, Bitmap>{ 

    ImageView poster; 

    public DownloadImageTask(ImageView poster) { 
     this.poster = poster; 
    } 

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

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

Ниже мой XML (activity_main файл)

<GridView 
    android:id="@+id/gridView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:columnWidth="185dp" 
    android:numColumns="auto_fit"/> 

У меня также есть вызов image_item ImageView файл

+1

Вы должны рассмотривать используя LIBS как Glide/PICASSO/ИЮОЖА, он будет делать работу лучше при загрузке изображения –

+1

не изобретайте колесо. используйте Picasso или библиотеку аналогичного вида –

+0

использовать [Picasso] (http://square.github.io/picasso/) – SripadRaj

ответ

-2

Вы можете использовать picaso библиотеку на сервере вашей цели. https://github.com/square/picasso

Вам просто нужно инициализировать класс Пикассо и задать URL-адрес.

+0

Да, после использования Picasso, и сейчас это нормально ~~ спасибо! –

0

Честно говоря, я не знаю, почему. Но использовать этот конструктор решить эту проблему:

super(context,0,imgUrlList); 

вместо

super(context, R.layout.image_item); 
+0

И, честно говоря, мне не очень нравится ваш стиль кода. Маленькие ошибки везде. –

+0

Спасибо за ваш ответ. Я только начинаю изучать кодирование 10 дней раньше. Я знаю, что многое можно улучшить. Однако я попытался использовать предоставленный вами код. Но по-прежнему не могу работать в моем телефоне. –

+0

Не могли бы вы рассказать мне, как найти небольшие ошибки? –

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