Reputation: 994
I'm trying to make an android application which displays the latest news off of my web site, I’m confused specifically about these two things?
1.How exactly can I get the news from my web site every time the phone is connected to internet automatically?
2.How am i going to store this information and subsequently use it for updates on the device?
I found this code from google, am i headed in the right direction?:
public abstract class BaseFeedParser implements FeedParser {
// names of the XML tags
static final String PUB_DATE = "pubDate";
static final String DESCRIPTION = "description";
static final String LINK = "link";
static final String TITLE = "title";
static final String ITEM = "item";
final URL feedUrl;
protected BaseFeedParser(String feedUrl){
try {
this.feedUrl = new URL(feedUrl);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
protected InputStream getInputStream() {
try {
return feedUrl.openConnection().getInputStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Upvotes: 1
Views: 1362
Reputation: 1116
The piece of code you have found is an XML parser-like approach. Basically, what it should do is to receive and parse information from your website. More about parsing XML in Android can be found here.
Responding to your questions:
You could get the news from your website through its RSS feed.
This is not a trivial task. You should:
Make a HTTP
request with the RSS link to your website to obtain the XML feed as an input stream. You can achieve this with HttpURLConnection
class. More details here. Make sure to add the <uses-permission android:name="android.permission.INTERNET" />
permission to the AndroidManifest.xml
After you have the XML, parse it with your feed parser and obtain a list of RssItems
. An RssItem
could look like this:
public class RSSItem {
private String title;
private String description;
private String category;
private String pubdate;
private String link;
//Getters and setters here
}
List<RssItem>
and display the items in a ListView
. You can store the bunch of RSSItem
in a SQLite Database
. Your database could have just one table with 5 item properties (title, description, etc) as columns + one column for an id. More on databases here.
Regarding every time the phone is connected to internet automatically
:
From a user perspective I would not prefer a RSS news app to constantly fetch for the feed every time the phone connects to the Internet. That is because of performance issues (battery drain, data traffic). What if the phone is always connected to the Internet, it won't fetch anything during this time?
Instead, I would like this kind of app to have a refresh mechanism in order to fetch the news when I want (maybe implement a button).
Upvotes: 1
Reputation: 2402
You could use a BroadcastReceiver that get's notified whenever a connectivity change occurs. See more about this here:
http://www.grokkingandroid.com/android-getting-notified-of-connectivity-changes/
http://www.grokkingandroid.com/android-tutorial-broadcastreceiver/
But you probably end up making too many requests - because the user will use your app only occasionally, while the BroadcastReceiver gets notified of every change.
Since you are displaying a feed why not load the data when the user actually uses your app and until they the newest feed items are available present the existing news items.
I would prefer an app that loads data at startup over an app that drains the battery of my device any time - unless I use the app and the up-to-date data constantly (like email).
As another possibility you might want to have a look at Google Cloud Messaging. In this case changes are pushed in a battery-friendly way.
For your second question: For a feed I probably would use the SQLite database available on all Android devices.
Upvotes: 0