I need to take feeds over RSS Feed URLs that I need to fill out and show the news in descending order.
Some links do not have an xml tag for <category> , so I need to create it: I need to know where the feeds come from so that I can classify them.
This is what I'm trying to achieve: (for Source n, I mean the category)
[! [enter image description here] [1]] [1]
I used Yahoo!Pipes to make all of these changes.
My attempt was to create a CustomListView for each URL, and then run AsyncTasks all at the same time, but this does not work correctly - the channels are not displayed in ascending order.
Mainactivity
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener { private RSSFeed myRssFeed = null; String[] urlFeed = {"url1", "url2"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); for (int i = 0; i < urlFeed.length; i++) { News news = new News(i); news.execute(); } } @Override public void onRefresh() { for (int i = 0; i < urlFeed.length; i++) { News news = new News(i); news.execute(); } } private class News extends AsyncTask<Object, Void, Void> { protected int number; public News(int urlNumber) { number = urlNumber; } @Override protected Void doInBackground(Object... arg0) { String data = ""; InputStream iStream; try{ URL url = new URL(urlFeed[number]);
Rssfeed
public class RSSFeed { private String title = null; private String description = null; private String link = null; private String pubdate = null; private String image = null; private String enclosure = null; private String author = null; private List<RSSItem> itemList; RSSFeed(){ itemList = new Vector<RSSItem>(0); } void addItem(RSSItem item){ itemList.add(item); } RSSItem getItem(int location){ return itemList.get(location); } List<RSSItem> getList(){ return itemList; } }
RSSItem
public class RSSItem { private String title = null; private String description = null; private String link = null; private String pubdate = null; private String image = null; private String enclosure = null; private String author = null; }
Customlist
public class CustomList extends ArrayAdapter<RSSItem> { private static Activity context = null; private final List<RSSItem> web; public CustomList(Activity context, List<RSSItem> web) { super(context, R.layout.new_listview, web); CustomList.context = context; this.web = web; } @SuppressLint("SetTextI18n") @Override public View getView(final int position, View view, ViewGroup parent) { LayoutInflater inflater = context.getLayoutInflater(); @SuppressLint({"ViewHolder", "InflateParams"}) final View rowView = inflater.inflate(R.layout.new_listview, null, true); ImageView imageView = (ImageView)rowView.findViewById(R.id.image); Picasso.with(context).load(web.get(position).getImage()).into(imageView); TextView textView = (TextView)rowView.findViewById(R.id.title); textView.setText(Html.fromHtml(web.get(position).getTitle())); TextView textView1 = (TextView)rowView.findViewById(R.id.description); textView1.setText(web.get(position).getDescription()); TextView textView2 = (TextView)rowView.findViewById(R.id.pubdate); textView2.setText(pubdate); return rowView; } }
RSShandler
public class RSSHandler extends DefaultHandler { final int state_unknown = 0; final int state_title = 1; final int state_description = 2; final int state_link = 3; final int state_pubdate = 4; final int state_enclosure = 6; final int state_image = 5; final int state_author = 7; int currentState = state_unknown; String url; RSSFeed feed; RSSItem item; boolean itemFound = false; RSSHandler(){ } RSSFeed getFeed(){ return feed; } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub feed = new RSSFeed(); item = new RSSItem(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if (localName.equalsIgnoreCase("item")){ itemFound = true; item = new RSSItem(); currentState = state_unknown; } else if (localName.equals("enclosure")) { url = attributes.getValue("url"); currentState = state_image; } else if (localName.equalsIgnoreCase("title")){ currentState = state_title; } else if (localName.equalsIgnoreCase("description")){ currentState = state_description; } else if (localName.equalsIgnoreCase("link")){ currentState = state_link; } else if (localName.equalsIgnoreCase("pubdate")){ currentState = state_pubdate; } else if (localName.equalsIgnoreCase("author")){ currentState = state_author; } else{ currentState = state_unknown; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub if (localName.equalsIgnoreCase("item")){ feed.addItem(item); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub String strCharacters = new String(ch,start,length); if (itemFound){ // "item" tag found, it item parameter switch(currentState){ case state_enclosure: item.setEnclosure(strCharacters); break; case state_title: item.setTitle(strCharacters); break; case state_image: item.setImage(url); break; case state_description: item.setDescription(strCharacters); break; case state_link: item.setLink(strCharacters); break; case state_pubdate: item.setPubdate(strCharacters); break; case state_author: item.setAuthor(strCharacters); break; default: break; } } else{ // not "item" tag found, it feed parameter switch(currentState){ case state_enclosure: feed.setEnclosure(strCharacters); break; case state_title: feed.setTitle(strCharacters); break; case state_image: feed.setImage(url); break; case state_description: feed.setDescription(strCharacters); break; case state_link: feed.setLink(strCharacters); break; case state_pubdate: feed.setPubdate(strCharacters); break; case state_author: feed.setAuthor(strCharacters); break; default: break; } } currentState = state_unknown; }