Android - 如何使ListView的一个条目在浏览器中打开URL?

3
我正在按照这个网站的示例构建一个RSS订阅阅读器:https://www.androidpit.com/java-guide-2-program-your-own-rss-reader。目前,当您单击某个订阅标题时,什么都不会发生。我希望它能在浏览器中打开相应的链接,但我还没有弄清楚怎么做。我尝试过以下方法:
private String readItem(XmlPullParser parser) throws XmlPullParserException, IOException {
            String result = null;
            parser.require(XmlPullParser.START_TAG, null, "item");
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                if (name.equals("title")) {
                    result = readTitle(parser);                 
                } else {
                    skip(parser);
                }
            } 
            return result;
        }

        // Processes link tags in the feed.
        private List<String> readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
            ArrayList<String> link = new ArrayList<>();
            parser.require(XmlPullParser.START_TAG, null, "link");
            link.add(readText(parser));
            parser.require(XmlPullParser.END_TAG, null, "link");
            return link;
        }

        // Processes title tags in the feed.
        private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
            parser.require(XmlPullParser.START_TAG, null, "title");
            String title = readText(parser);
            parser.require(XmlPullParser.END_TAG, null, "title");
            return title;
        }

我收到了一个警告,它说方法readLink从未在本地使用过。我不确定是否应该更改readItem方法,因为有一个readChannel方法需要返回一个字符串值。
当我使用public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); ... }并与Toast一起使用时,我能够看到被点击的项目的位置,但是当我使用这个时,应用程序会崩溃。
        Uri uri = Uri.parse(link.get(position));
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);

我的问题是:如何打开一个浏览器,访问相应的标题链接?我很新手,对Java和Android开发都不熟悉,请多多包涵。
附注:我已将我的ListView设置为可点击。

应用程序崩溃 - 使用LogCat来检查与您的崩溃相关的Java堆栈跟踪:https://dev59.com/iGAg5IYBdhLWcg3wpMSz - CommonsWare
我在我的手机上测试应用程序,因为模拟器非常慢,所以我认为我无法看到与崩溃相关的堆栈跟踪。 - admiralchip
如果您可以通过从IDE运行应用程序在手机上进行测试,则可以访问LogCat。如果不能,则需要修复开发环境,以便您可以在手机上访问LogCat。 - CommonsWare
目前我所做的是将应用程序导出为.apk文件,然后将其复制并安装到我的手机上。找不到正确的驱动程序使其与IDE配合工作。 - admiralchip
1
把这个项目放一边,先花些时间让模拟器运行得更好,或者为你的设备找到正确的驱动程序,或者获取一个可以获得正确驱动程序的设备。LogCat和其他调试工具对于Android开发至关重要。 - CommonsWare
1个回答

2

好的。我已经想通了,所以我想在这里分享一下,以防有人也在寻找同样的内容。

我必须在PlaceholderFragment类中添加private ArrayList<String> links = new ArrayList<>();

public static class PlaceholderFragment extends ListFragment {
     private ArrayList<String> links = new ArrayList<>();
    ...
}

请将以下更改应用于readItem方法:
if (name.equals("title")) {
    result = readTitle(parser);                 
} else if (name.equals("link")) {
    links.add(readLink(parser));
} else {
    skip(parser);
}

添加以下内容:

        // Processes link tags in the feed.
        private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
            parser.require(XmlPullParser.START_TAG, null, "link");
            String link = readText(parser);
            parser.require(XmlPullParser.END_TAG, null, "link");
            return link;
        }

然后添加这个:
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Uri uri = Uri.parse(links.get(position));
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
    }

希望这能帮助到有需要的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接