0

それは昨日まで完全に正常に実行されていました...私はAndroidプログラミングが初めてで、どんな助けも素晴らしいでしょう..私のアプリでは、ダウンロードしたxmlファイルを解析してから動的UIを作成しています...これが私のコードのスニペットです..

private class ParseXML extends AsyncTask<Integer, Integer, Document>{

    public void onPostExecute(Document d) {


        ParseDocument(d); }



    @Override
protected Document doInBackground(Integer... params) {
    // TODO Auto-generated method stub
     DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();

    try {
        //Uri uri = Uri.parse("android.resource://com.example.xml_parser/raw/options");
        InputStream is=getResources().openRawResource(R.raw.options);

        DocumentBuilder db = dbf.newDocumentBuilder();
        dom=db.parse(is);
        Log.i(TAG,"parsing done");

    }

    catch(ParserConfigurationException pce){
        pce.printStackTrace();
    }
    catch(SAXException se){
        se.printStackTrace();
    }
    catch(IOException ioe){
        ioe.printStackTrace();
    }
    return dom;


}
4

1 に答える 1

2

間違いは、メイン UI スレッドで XML を解析しようとしているということです。これは、ユーザーが UI でアクションを実行することを制限していることを意味します。Andorid では、アプリケーションが 5 秒以上応答しない場合は常に、[アプリケーションが応答していません] ダイアログが表示されることに注意してください。

したがって、AsyncTask を使用して XML を解析し、そこから Ui を更新する必要があります。

ここに例があります、

https://stackoverflow.com/a/5806402/603744

AsyncTask には、次の 3 つのメソッドが含まれています。

  1. doInBackground -これは Thread に相当します。
  2. onPostExcecute - doInBackground がそのタスクを完了すると呼び出されます。
  3. onPreExecute-doInBackground が呼び出される前に呼び出されます。

2 番目と 3 番目の方法は UI に関連しており、ここで任意の UI ベースのアクションを実行できます。1 番目の方法は、大量の計算を実行する必要があるバックグラウンド スレッドであるため、UI には影響しません。

于 2012-07-23T05:15:23.093 に答える