0

私は次のクラスを持っています:

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;
    }
    //................
}

残念ながら、エラーがどこにあるのかわかりません。LogCat(フィルターなし)に表示されます:

01-24 17:47:44.194:W / Zygote(37):プリロードされたドローアブルリソースは構成によって異なります!! 01-24 17:47:44.204:W / Zygote(37):設定によって異なるプリロードされたドローアブルリソース#0x1080446(res / drawable-mdpi / popup_inline_error_above_holo_light.9.png)!! 01-24 17:47:44.284:W / Zygote(37):設定によって異なるプリロードされたドローアブルリソース#0x1080447(res / drawable-mdpi / popup_inline_error_holo_dark.9.png)!! 01-24 17:47:44.294:W / Zygote(37):設定によって異なるプリロードされたドローアブルリソース#0x1080448(res / drawable-mdpi / popup_inline_error_holo_light.9.png)!! 01-24 17:47:46.315:W / Zygote(37):設定によって異なるプリロードされたドローアブルリソース#0x10802ec(res / drawable-mdpi / ic_lockscreen_outerring.png)!! 01-24 17:47:48.644:A / BatteryStatsImpl(93):原因:libcore.io.ErrnoException:オープンに失敗しました:/mnt/sdcard/.android_secure/'、スキップ:アクセスが拒否されました。01-24 17:48:44.462:I / ActivityManager(93):ブロードキャストcom.svox.pico /.VoiceDataInstallerReceiverのproccom.svox.picoを開始します:pid = 541 uid = 10024 gids = {1015} 01-24 17: 48:51.142:W / NetworkManagementSocketTagger(93):setKernelCountSet(10041、1)がerrno-2で失敗しました01-2417:48:55.792:W / NetworkManagementSocketTagger(93):setKernelCountSet(10005、0)がerrno-2で失敗しました

アプリケーション名でフィルタリング:LogCatにはvoidがあります。

タグ「タグ」でフィルタリング:

01-24 17:48:03.064:W / NetworkManagementSocketTagger(93):setKernelCountSet(10005、1)がerrno-2で失敗しました01-2417:48:51.142:W / NetworkManagementSocketTagger(93):setKernelCountSet(10041、1)が失敗しましたerrno -2 01-24 17:48:55.792:W / NetworkManagementSocketTagger(93):setKernelCountSet(10005、0)がerrno-2で失敗しました

4

1 に答える 1

3

XMLファイルがアプリケーションで使用するために正しく解析されていないようです。これを修正するための1つの可能な解決策は、適切なXMLパーサーを作成し、それを使用して、内のファイル内のすべてのノードをループすることAsyncTaskです。これが私が作成したパーサーの例です:

onPostExecute()次に、パーサーを使用してDOM要素を取得し、メソッド内の表示したい場所に情報をプッシュするだけです。これがサンプルです、

........

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

........

また、これはこのアプローチに使用されるXMLファイルの構造の例ですが、キーを正しくマッピングしている限り、どの構造でも問題ありません。

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

これがエラーの修正に役立つことを願っています。

于 2013-01-24T19:10:05.917 に答える