0

i have a RSS reader which reads news from an url, the url contains images in the i'm able to retrieve the url of the image but i'm not able to display them in the view. i'm reading my image using the following code:

url(myRssFeed.getList().get(position).getImageLink())

i want the image to be displayed in the listview. this is my list activity. please have a review of the code below:

public class AndroidRssReader extends ListActivity {

private RSSFeed myRssFeed = null;

TextView feedTitle;
TextView feedDescribtion;
TextView feedPubdate;
TextView feedLink;
ImageView feedImageView;

public class MyCustomAdapter extends ArrayAdapter<RSSItem> {

    public MyCustomAdapter(Context context, int textViewResourceId,
            List<RSSItem> list) {
        super(context, textViewResourceId, list);   
    }
    RSSItem item;
    RSSFeed feed;
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        //return super.getView(position, convertView, parent);

        View row = convertView;
        item = new RSSItem();
        feed = new RSSFeed();

        if(row==null){
            LayoutInflater inflater=getLayoutInflater();
            row=inflater.inflate(R.layout.row, parent, false);  
        }

     ImageView imageView = (ImageView)row.findViewById(R.id.listimage);

    /*
         try{ 

        //    String images = item.getImageLink();
              String images = myRssFeed.getThumbnail();
              System.out.println("=== IMAGE VIEW=======: "+ item.getImageLink());
              System.out.println("-------Tumbnail------: "+ feed.getThumbnail());

      //      String images = (myRssFeed.getList().get(position).getImageLink());
              Bitmap bitmap = BitmapFactory.decodeStream(new URL(images).openStream());

              System.out.println("------IAMGE--------: " + myRssFeed.getList().get(position).getImageLink());
              imageView.setImageBitmap(bitmap);
              } catch (Exception e) {
              System.out.println(e);
              e.printStackTrace();
            } */
               String image = myRssFeed.getList().get(position).getImageLink();
               System.out.println("====IMAGE=====: " +myRssFeed.getList().get(position).getImageLink());
               System.out.println("====IMAGE=====: " + item.getImageLink());
               System.out.println("====IMAGE=====: " + feed.getThumbnail());
                            Bitmap lBitmap;
                            try {
                                lBitmap = BitmapFactory.decodeStream(new URL(image).openStream());
                                 imageView.setImageBitmap(lBitmap);
                            } catch (MalformedURLException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }





        TextView listTitle=(TextView)row.findViewById(R.id.listtitle);
        listTitle.setText(myRssFeed.getList().get(position).getTitle());
        System.out.println("TITLE----: "+ myRssFeed.getTitle());
        TextView listPubdate=(TextView)row.findViewById(R.id.listpubdate);
        listPubdate.setText(myRssFeed.getList().get(position).getPubdate());

        return row;
    }
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    feedTitle = (TextView)findViewById(R.id.feedtitle);
    feedDescribtion = (TextView)findViewById(R.id.feeddescribtion);
    feedPubdate = (TextView)findViewById(R.id.feedpubdate);
    feedLink = (TextView)findViewById(R.id.feedlink);
    feedImageView = (ImageView)findViewById(R.id.feedimage);

    feedTitle.setVisibility(View.GONE);
    feedDescribtion.setVisibility(View.GONE);
    feedPubdate.setVisibility(View.GONE);
    feedLink.setVisibility(View.GONE);

    readRss();
}

private void readRss(){

    feedTitle.setText("--- wait ---");
    feedDescribtion.setText("");
    feedPubdate.setText("");
    feedLink.setText("");
//  feedImageView.setImage("");
    setListAdapter(null);

    Toast.makeText(this, "Reading RSS, Please wait.", Toast.LENGTH_LONG).show();

    try {
        URL rssUrl = new URL("http://www.bedfordshire-news.co.uk/News/rss.xml");
        SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
        SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
        XMLReader myXMLReader = mySAXParser.getXMLReader();
        RSSHandler myRSSHandler = new RSSHandler();
        myXMLReader.setContentHandler(myRSSHandler);
        InputSource myInputSource = new InputSource(rssUrl.openStream());
        myXMLReader.parse(myInputSource);

        myRssFeed = myRSSHandler.getFeed();

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if (myRssFeed!=null)
    {
        Calendar c = Calendar.getInstance();
        String strCurrentTiime =  "\n(Time of Reading - "
                                + c.get(Calendar.HOUR_OF_DAY) 
                                + " : "
                                + c.get(Calendar.MINUTE) + ")\n";

        feedTitle.setText(myRssFeed.getTitle() + strCurrentTiime);
        feedDescribtion.setText(myRssFeed.getDescription());
        feedPubdate.setText(myRssFeed.getPubdate());
        feedLink.setText(myRssFeed.getLink());

         Bundle lBundle = new Bundle();
            lBundle.putString("url", myRssFeed.getThumbnail());
            System.out.println("---myRSSFeed-- THUMBNAIL--- " + myRssFeed.getThumbnail());
            Message msg = new Message();
            msg.setData(lBundle);
         //   handler.dispatchMessage(msg);


        MyCustomAdapter adapter =
            new MyCustomAdapter(this, R.layout.row, myRssFeed.getList());
        setListAdapter(adapter);

    }

}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(this,ShowDetails.class);
    Bundle bundle = new Bundle();
    bundle.putString("keyTitle", myRssFeed.getItem(position).getTitle());
    bundle.putString("keyDescription", myRssFeed.getItem(position).getDescription());
    bundle.putString("keyLink", myRssFeed.getItem(position).getLink());
    bundle.putString("keyPubdate", myRssFeed.getItem(position).getPubdate());
    bundle.putString("keyImageView",myRssFeed.getItem(position).getImageLink());
    intent.putExtras(bundle);
    startActivity(intent);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    menu.add(0, 0, 0, "Reload");
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch(item.getItemId()){
    case (0): readRss();

            break;
    default:
            break;
    }

    return true;
}


}

Please let me know how would i set the image.

Adam Rackis
  • 82,527
  • 56
  • 270
  • 393
Chandu
  • 11
  • 4

1 Answers1

0
Either download that image from the following url in AsyncTask and then set it to Imageview.

or just set the image with rss news in Textview of Listview by given method.

You can use Image Getter method for this and display that image in textview of Listview..

Spanned spannedContent = Html.fromHtml(htmlString, new ImageGetter() {

        @Override
        public Drawable getDrawable(String source) {
          // get image from url
        }
    }, null);
user370305
  • 108,599
  • 23
  • 164
  • 151
  • @Chandu: you might also like to have a look on [Fedor's Lazy Loading](http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview/3068012#3068012) – Adil Soomro Nov 18 '11 at 08:56