如何通过url获取xml(AsyncTask,android)?

如何通过url获取xml(AsyncTask,android)?,android,android-asynctask,Android,Android Asynctask,我有以下课程: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); XmlManager xm = new XmlMa

我有以下课程:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        XmlManager xm = new XmlManager();
        Log.i("tag",documentToString(xm.getXmlFromUrl("http://domen.com/abc/timelist.xml")));
    }
    //................
}

public class XmlManager {
    public Document getXmlFromUrl(String url) {
        GetXmlTask txt = new GetXmlTask();
        txt.execute(url);
        Document doc = null;
        try {
            doc = txt.get(5, TimeUnit.SECONDS);
            Log.i("tag", "test");
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return doc;
    }
    //................
}

public class GetXmlTask extends AsyncTask<String, Void, org.w3c.dom.Document> {
    @Override
    protected Document doInBackground(String... arg0) {
          String url = "";
              if( arg0.length > 0 ){
                  url = arg0[0];                
              }

              Document doc = null;
          try {
            doc = stringToDom(convertStreamToString(new URL(url).openStream()));
          }
          catch (Exception e) {
            e.printStackTrace();
          }

          return doc;
    }
    //................
}
公共类MainActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
XmlManager xm=新的XmlManager();
Log.i(“标记”),documentToString(xm.getXmlFromUrl(“http://domen.com/abc/timelist.xml")));
}
//................
}
公共类XmlManager{
公共文档getXmlFromUrl(字符串url){
GetXmlTask txt=新建GetXmlTask();
txt.execute(url);
单据单据=空;
试一试{
doc=txt.get(5,时间单位为秒);
Log.i(“标签”、“测试”);
}
捕获(例外e){
e、 printStackTrace();
}
退货单;
}
//................
}
公共类GetXmlTask扩展了AsyncTask{
@凌驾
受保护文档doInBackground(字符串…arg0){
字符串url=“”;
如果(arg0.length>0){
url=arg0[0];
}
单据单据=空;
试一试{
doc=stringToDom(convertStreamToString(新URL.openStream());
}
捕获(例外e){
e、 printStackTrace();
}
退货单;
}
//................
}
不幸的是,我不明白哪里有错误。我在LogCat中看到(无过滤器):

01-24 17:47:44.194:W/合子(37):预加载的可提取资源 配置不同!!01-2417:47:44.204:W/合子(37): 预加载可提取资源#0x1080446 (res/drawable mdpi/popup\u inline\u error\u over\u holo\u light.9.png)这 配置不同!!01-2417:47:44.284:W/合子(37): 预加载可提取资源#0x1080447 (res/drawable mdpi/popup\u inline\u error\u holo\u dark.9.png)这会有所不同 有配置!!01-24 17:47:44.294:W/合子(37):预加载 可提取资源#0x1080448 (res/drawable mdpi/popup_inline_error_holo_light.9.png)的变化 有配置!!01-24 17:47:46.315:W/合子(37):预加载 可提取资源#0x10802ec (res/drawable mdpi/ic_lockscreen_outerring.png)随 配置01-24 17:47:48.644:A/BatteryStatsiml(93):由以下原因引起: libcore.io.ErrnoException:open失败:enoint(没有这样的文件或 目录)01-2417:47:48.714:E/AndroidRuntime(93):错误报告 WTF 01-24 17:47:48.714:E/AndroidRuntime(93):在 android.util.Log$1.onTerribleFailure(Log.java:103)01-24 17:47:56.774: E/SoundPool(93):加载/system/media/audio/ui/Lock.ogg 01-24时出错 17:47:56.774:E/声音池(93):加载错误 /system/media/audio/ui/Unlock.ogg 01-24 17:48:03.064: W/NetworkManagementSocketTagger(93):setKernelCountSet(10005,1) 失败,错误号为-2 01-24 17:48:11.094:D/StrictMode(190):at com.android.internal.telephony.gsm.SpnOverride.loadSpnOverrides(SpnOverride.java:61) 01-24 17:48:11.094:D/StrictMode(190):在 com.android.internal.telephony.gsm.SpnOverride.(SpnOverride.java:43) 01-24 17:48:12.592:E/声音池(93):加载错误 /系统/媒体/音频/用户界面/效果_Tick.ogg 01-24 17:48:12.592: E/SoundPool(93):加载错误/system/media/audio/ui/Effect\u Tick.ogg 01-24 17:48:12.592:E/声音池(93):加载错误 /系统/媒体/音频/用户界面/效果_Tick.ogg 01-24 17:48:12.592: E/SoundPool(93):加载错误/system/media/audio/ui/Effect\u Tick.ogg 01-24 17:48:12.592:E/声音池(93):加载错误 /系统/媒体/音频/用户界面/效果_Tick.ogg 01-24 17:48:12.592: E/SoundPool(93):加载错误 /系统/媒体/音频/用户界面/按键标准.ogg 01-24 17:48:12.592: E/SoundPool(93):加载错误 /系统/媒体/音频/用户界面/按键Spacebar.ogg 01-24 17:48:12.592: E/SoundPool(93):加载错误 /系统/媒体/音频/用户界面/按键Delete.ogg 01-24 17:48:12.592: E/SoundPool(93):加载错误 /system/media/audio/ui/KeypressReturn.ogg 01-24 17:48:12.982: W/AudioService(93):加载SoundEffects(),加载样本时出现错误-1 01-24 17:48:20.262:A/NetworkStats(93):由以下原因引起: libcore.io.ErrnoException:open失败:enoint(没有这样的文件或 目录)01-2417:48:24.822:D/StrictMode(190):at com.android.internal.telephony.gsm.GsmDataConnectionTracker.getPreferredApn(GsmDataConnectionTracker.java:2276) 01-24 17:48:28.822:A/NetworkStats(93):由以下原因引起: libcore.io.ErrnoException:open失败:enoint(没有这样的文件或 目录)01-24 17:48:30.883:D/MMSSMSSDatabaseHelper(190):[MmsSmsDb] hasAutoIncrement:创建表线程(_idinteger主键 自动递增,日期整数默认值0,消息计数整数默认值 0,收件人ID文本,代码段文本,代码段cs整数默认值0,已读 整数默认值1,类型整数默认值0,错误整数默认值 0,具有_附件整数默认值0)结果:真01-24 17:48:38.492: W/MediaScanner(412):打开目录时出错 “/mnt/sdcard/.android_secure/”,正在跳过:权限被拒绝。01-24 17:48:44.462:I/ActivityManager(93):为启动proc com.svox.pico 广播com.svox.pico/.VoiceDataInstallerReceiver:pid=541 uid=10024 gids={1015}01-2417:48:51.142:W/NetworkManagementSocketTagger(93): setKernelCountSet(10041,1)失败,错误号为-2 01-24 17:48:55.792: W/NetworkManagementSocketTagger(93):setKernelCountSet(10005,0) 失败,错误号为-2

按应用程序名称筛选: LogCat中存在空白

按标签“标签”筛选:

01-24 17:48:03.064:W/NetworkManagementSocketTagger(93): setKernelCountSet(10005,1)失败,错误号为-2 01-24 17:48:51.142: W/NetworkManagementSocketTagger(93):setKernelCountSet(10041,1) 失败,错误号为-2 01-24 17:48:55.792: W/NetworkManagementSocketTagger(93):setKernelCountSet(10005,0) 失败,错误号为-2


似乎没有正确解析XML文件以在应用程序中使用。解决这个问题的一个可能的解决方案是创建一个适当的XML解析器,然后使用它在文件中的所有节点上循环
........

private class LoadExampleTask extends
        AsyncTask<Void, Integer, ArrayList<HashMap<String, String>>> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // code here
    }

    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(
            Void... params) {

        XMLParser parser = new XMLParser(); // the parser create as seen in the Gist from GitHub
        String xml = parser.getXmlFromUrl(URL); // getting XML from URL
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_VENUE);

        // looping through all song nodes <venue>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            map.put(KEY_ID, parser.getValue(e, KEY_ID));
            map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
            map.put(KEY_DESCRIPTION, parser.getValue(e, KEY_DESCRIPTION));
            map.put(KEY_LOCATION, parser.getValue(e, KEY_LOCATION.toString()));
            map.put(KEY_TAGS, parser.getValue(e, KEY_TAGS.toString()));
            map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
            map.put(KEY_THUMB_LARGE_URL, parser.getValue(e, KEY_THUMB_LARGE_URL));

            // adding HashList to ArrayList
            exampleList.add(map);
        }

        return exampleList;
    }

    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
        super.onPostExecute(result);

        try {
            // Getting adapter by passing xml data ArrayList
            adapter = new YourExampleAdapter(getActivity(), exampleList);
            list.setAdapter(adapter);
            adapter.notifyDataSetChanged();

        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }
}

........
<venues>
    <venue>
      <id></id>
      <title></title>
      <location></location>
      <tags></tags>
      <description></description>
      <thumb_url></thumb_url>
      <thumb_large_url></thumb_large_url>
    </venue>
</venues>