2014-08-14 3 views
-1

Я пытаюсь получить изображения из URL-адресов в массиве строк, и мое приложение рушится. Он сбой в строке 110: InputStream input = connection.getInputStream(); Что я делаю неправильно?Растровое изображение изображения с URL

Вот мой класс:

package kyfb.android.kyfb.com.kyfb; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Color; 
import android.media.Image; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 

/** 
* Created by KFB on 8/12/14. 
*/ 
class ActionAlertsAdapter extends BaseAdapter { 
    private LayoutInflater inflater; 

    public ActionAlertsAdapter(Context context) { 

     inflater = LayoutInflater.from(context); 
    } 

    public int getCount() { 
     // TODO Auto-generated method stub 

     return ActionAlertsFragment.title.length; 
    } 

    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder holder; 

     if(convertView == null){ 
      convertView = inflater.inflate(R.layout.item_feed, null); 
      holder = new ViewHolder(); 
      holder.lytItemFeed = (RelativeLayout) convertView.findViewById(R.id.lytItemFeed); 
      holder.txtTitle= (TextView) convertView.findViewById(R.id.txtTitle); 
      holder.txtPubDate = (TextView) convertView.findViewById(R.id.txtPubDate); 
      holder.thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail); 

      convertView.setTag(holder); 
     }else{ 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     if((position%2)!=0){ 
      holder.lytItemFeed.setBackgroundColor(Color.TRANSPARENT); 
     }else{ 
      holder.lytItemFeed.setBackgroundColor(Color.TRANSPARENT); 
     } 

     holder.txtTitle.setText(ActionAlertsFragment.title[position]); 
     holder.txtPubDate.setText(ActionAlertsFragment.pubDate[position]); 

     Bitmap bitmap = getBitmapFromURL(ActionAlertsFragment.thumb[position]); 
     if(bitmap == null) { 
      holder.thumbnail.setImageResource(R.drawable.kyfb); 
     } 
     else { 
      holder.thumbnail.setImageBitmap(bitmap); 
     } 

     holder.txtTitle.setTextColor(Color.WHITE); 
     holder.txtPubDate.setTextColor(Color.WHITE); 

     return convertView; 
    } 

    public Bitmap getBitmapFromURL(String imageUrl) { 
     try { 
      URL url = new URL(imageUrl); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      Bitmap myBitmap = BitmapFactory.decodeStream(input); 
      return myBitmap; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

    static class ViewHolder { 
     TextView txtTitle, txtPubDate; 
     ImageView thumbnail; 
     RelativeLayout lytItemFeed; 
    } 
} 
+0

Возможно, вам понадобится предоставить трассировку стека, чтобы получить большую полезную помощь. –

+1

У вас есть разрешения в манифесте. Вы не должны загружать изображения в основной поток. – nikolap

+0

"android os network on the main thread exception"? – andrew

ответ

1

Это не прямо ответить на ваш вопрос, но вы можете рассмотреть возможность использования изображения загрузки библиотеки, такие как Picasso или Volley. Существует много сложностей - некоторые тонкие, некоторые не так много - при загрузке изображений из сети, тем более, когда вы пытаетесь сделать это в ListView. Обе эти библиотеки (и несколько других там) заботятся обо всех или большей сложности для вас.

+1

Согласен. Пикассо - действительно хорошее решение для этой проблемы :) – andrew

1

Вы должны перенести свой метод в AsyncTask. Вы загружаете материал в свой основной поток.

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