Android-无法从url字符串打开浏览器意图
我正在处理XML并收集URL作为字符串变量。我得到了正确的链接,我可以在LogCat中设置它 然而,当我建立了一个监听器;它无法识别链接并引发ActivityNotFoundException 这是代码Android-无法从url字符串打开浏览器意图,android,android-intent,android-browser,intentservice,Android,Android Intent,Android Browser,Intentservice,我正在处理XML并收集URL作为字符串变量。我得到了正确的链接,我可以在LogCat中设置它 然而,当我建立了一个监听器;它无法识别链接并引发ActivityNotFoundException 这是代码 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final String announcementsTitle="announcem
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final String announcementsTitle="announcements";
final String announcementsLink = "link";
ArrayList<HashMap<String, String>> announcementsList = new ArrayList<HashMap<String, String>>();
try
{
URL url = new URL("http://www.myexperiment.org/announcements.xml?num=100&order=reverse");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList1 = doc.getElementsByTagName("announcement");
for(int i=0; i < nodeList1.getLength(); i++)
{
//Creating HashMap
HashMap<String, String> map = new HashMap<String, String>();
Node node = nodeList1.item(i);
//For the announcement title
Element firstElement = (Element) node;
NodeList nameList = firstElement.getElementsByTagName("announcement");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();
String link1 = firstElement.getAttributeNode("resource").getNodeValue();
//Adding values of each into HashMap
map.put(announcementsTitle,((Node) nameList.item(0)).getNodeValue());
map.put(announcementsLink,link1);
String title = nameList.item(0).getNodeValue();
Log.d("Announcements: ", title);
Log.d("Link: ", link1);
//Adding HashList to ArrayList
announcementsList.add(map);
}//for
ListAdapter adapter = new SimpleAdapter(this, announcementsList,R.layout.announcements,
new String[] {announcementsTitle, announcementsLink},
new int[] {R.id.announcementTitle});
setListAdapter(adapter);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
//String the new Intent open the browser with link
Log.d("Link: ", announcementsLink);
final Intent announcementsIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(announcementsLink));
startActivity(announcementsIntent);
}
});
}
catch(Exception e)
{
System.out.println("XML Parsing Exeption = " + e);
}
}//onCreate
您正在将
announcementsLink
变量的值作为URI传递给startActivity。此变量的值是并且将始终是“link”
。这不是有效的URI。我猜您想做的是获取与单击的ListItem关联的URI,而您没有这样做。您可以获取为特定列表项存储的链接,如下所示:
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
final String itemLink = adapter.getItem(potition).get(announcementsLink)
final Intent announcementsIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(itemLink));
startActivity(announcementsIntent);
}
});
lv.setOnItemClickListener(新的OnItemClickListener()
{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
最后一个字符串itemLink=adapter.getItem(potition.get)(announcementsLink)
final Intent announcementsinent=新意图(Intent.ACTION_视图,Uri.parse(itemLink));
startActivity(公告);
}
});
免责声明,我自己还没有测试过这段代码,但总体思路是这样的。谢谢您的回复。我做了你建议的合乎逻辑的改变。但是,出现了一个错误。它说itemLink必须是最终的,也就是说。但随后它也要求公告链接成为最终链接;如果我将其设置为final,那么它会抛出错误,使itemLink仅为string而不是final string。请尝试将announcementsLinks和announcmentTitles移出onCreate方法。只需将它们设置为类中的私有静态最终变量。
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
final String itemLink = adapter.getItem(potition).get(announcementsLink)
final Intent announcementsIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(itemLink));
startActivity(announcementsIntent);
}
});