【问题标题】:Create news application android with updates创建带有更新的新闻应用程序 android
【发布时间】:2012-09-07 19:47:02
【问题描述】:

我正在尝试制作一个显示最新消息的 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);
        }
    }
}

【问题讨论】:

    标签: android sqlite updates feed


    【解决方案1】:

    您发现的这段代码是一种类似于 XML 解析器的方法。基本上,它应该做的是从您的网站接收和解析信息。有关在 Android 中解析 XML 的更多信息,请参阅 here

    回答您的问题:

    1. 您可以通过其 RSS 提要从您的网站获取新闻。

      这不是一项简单的任务。你应该:

      • 使用指向您网站的 RSS 链接发出 HTTP 请求,以获取 XML 提要作为输入流。您可以使用HttpURLConnection 类来实现这一点。更多详情here。确保将<uses-permission android:name="android.permission.INTERNET" /> 权限添加到AndroidManifest.xml

      • 获得 XML 后,使用您的提要解析器对其进行解析并获取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 中显示项目。
    2. 您可以将RSSItem 的一堆存储在SQLite Database 中。您的数据库可能只有一个表,其中包含 5 个项目属性(标题、描述等)作为列 + 一列作为 id。更多关于数据库here

    关于every time the phone is connected to internet automatically

    从用户的角度来看,我不希望 RSS 新闻应用在每次手机连接到互联网时都不断地获取提要。这是因为性能问题(电池消耗、数据流量)。如果手机始终连接到 Internet,在此期间它不会获取任何内容怎么办?

    相反,我希望这种应用程序具有刷新机制,以便在我需要时获取新闻(也许实现一个按钮)。

    【讨论】:

      【解决方案2】:

      您可以使用 BroadcastReceiver 来在发生连接更改时收到通知。在此处查看更多信息:

      http://www.grokkingandroid.com/android-getting-notified-of-connectivity-changes/

      http://www.grokkingandroid.com/android-tutorial-broadcastreceiver/

      但您最终可能会发出太多请求 - 因为用户只会偶尔使用您的应用程序,而 BroadcastReceiver 会收到每个更改的通知。

      既然您正在显示一个提要,为什么不在用户实际使用您的应用程序时加载数据,直到他们有最新的提要项可用时才显示现有的新闻项。

      更喜欢在启动时加载数据的应用程序,而不是随时耗尽设备电池电量的应用程序 - 除非我不断使用该应用程序和最新数据(如电子邮件)。

      作为另一种可能性,您可能想看看 Google Cloud Messaging。在这种情况下,更改以电池友好的方式推送。

      对于您的第二个问题:对于提要,我可能会使用所有 Android 设备上可用的 SQLite 数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-11
        • 2012-03-10
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 2017-12-12
        • 1970-01-01
        相关资源
        最近更新 更多