Android - Невозможно открыть браузер Intent из строки URL - PullRequest
1 голос
/ 21 февраля 2012

Я вставляю XML и собираю URL как строковую переменную.Я получаю правильную ссылку и могу установить ее в LogCat.

Однако, когда я настраиваю onItemClickListener;он не распознает ссылку и выдает ActivityNotFoundException.

Вот код.

@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

Вот сообщение от LogCat

02-20 22:15:43.203: D/Link:(919): http://www.myexperiment.org/announcements/2  
02-20 22:15:43.203: D/Announcements:(919): New announcements feature!  
02-20 22:15:43.203: D/Link:(919): http://www.myexperiment.org/announcements/1  
02-20 22:15:50.163: D/Link:(919): link  
02-20 22:15:50.243: D/AndroidRuntime(919): Shutting down VM  
02-20 22:15:50.243: W/dalvikvm(919): threadid=1: thread exiting with uncaught exception (group=0x40015560)  
02-20 22:15:50.313: E/AndroidRuntime(919): FATAL EXCEPTION: main  
02-20 22:15:50.313: E/AndroidRuntime(919): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=link }  
02-20 22:15:50.313: E/AndroidRuntime(919):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)  
02-20 22:15:50.313: E/AndroidRuntime(919):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)  
02-20 22:15:50.313: E/AndroidRuntime(919):  at android.app.Activity.startActivityForResult(Activity.java:2827)  
02-20 22:15:50.313: E/AndroidRuntime(919):  at android.app.Activity.startActivity(Activity.java:2933) 

1 Ответ

0 голосов
/ 21 февраля 2012

Вы передаете значение переменной announcementsLink в startActivity в качестве вашего URI.Значение этой переменной есть и всегда будет "link".Это не действительный URI.Я предполагаю, что вместо этого вы хотели получить URI, связанный с ListItem, по которому щелкнули, а вы этого не делаете.Вы можете получить ссылку, которую вы сохранили для определенного элемента списка, например:

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);
    }
});

Отказ от ответственности, я сам не тестировал этот код, но общая идея есть.

...