我正在尝试创建一个显示最新消息的Android应用程序 离开我的网站,我对这两件事情特别困惑?
1.我每次都可以从我的网站获得新闻 手机是否自动连接到互联网?
2.我将如何存储此信息,然后将其用于设备上的更新?
我从谷歌找到了这个代码,我是朝着正确的方向前进的吗?:
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);
}
}
}
答案 0 :(得分:1)
您找到的代码片段是类似XML解析器的方法。基本上,它应该做的是从您的网站接收和解析信息。有关在Android中解析XML的更多信息,请参见here。
回答你的问题:
您可以通过RSS源从您的网站获取新闻。
这不是一项微不足道的任务。你应该:
使用指向您网站的RSS链接发出HTTP
请求,以获取XML Feed作为输入流。您可以使用HttpURLConnection
类来实现此目的。更多细节here。请务必将<uses-permission android:name="android.permission.INTERNET" />
权限添加到AndroidManifest.xml
获得XML后,使用Feed解析器解析它并获取RssItems
列表。 RssItem
可能如下所示:
public class RSSItem {
private String title;
private String description;
private String category;
private String pubdate;
private String link;
//Getters and setters here
}
List<RssItem>
并在ListView
中显示这些项目。 您可以将RSSItem
一堆存储在SQLite Database
中。您的数据库可能只有一个包含5个项属性(标题,描述等)的表作为列+一列用于id。有关数据库here的更多信息。
关于every time the phone is connected to internet automatically
:
从用户的角度来看,每次手机连接到互联网时,我都不希望RSS新闻应用程序不断获取Feed。这是因为性能问题(电池耗尽,数据流量)。如果手机始终连接到互联网,在此期间它将无法获取任何内容,该怎么办?
相反,我希望这种应用程序有一个刷新机制,以便在我想要的时候获取新闻(可能实现一个按钮)。
答案 1 :(得分:0)
您可以使用BroadcastReceiver,无论何时发生连接更改,都会收到通知。在这里查看更多相关信息:
http://www.grokkingandroid.com/android-getting-notified-of-connectivity-changes/
http://www.grokkingandroid.com/android-tutorial-broadcastreceiver/
但您可能最终会收到太多请求 - 因为用户只会偶尔使用您的应用,而BroadcastReceiver会收到每次更改的通知。
由于您正在显示Feed,因此当用户实际使用您的应用时,为什么不加载数据,直到最新的Feed项可用为止,显示现有的新闻项。
我更喜欢在启动时通过应用程序加载数据的应用程序随时耗尽我设备的电池 - 除非我不断使用应用程序和最新数据(如电子邮件) )。
作为另一种可能性,您可能希望了解Google Cloud Messaging。在这种情况下,更改是以电池友好的方式推送。
关于第二个问题:对于Feed,我可能会使用所有Android设备上提供的SQLite数据库。