1

Android 開発は初めてですが、xml パーサーを作成しようとしています。私はいくつかのチュートに従ってandroid.saxライブラリを使用してきましたが、これはうまく機能します。私が懐疑的になっていることの 1 つは、実際には別のスレッドでパーサーを起動していないことです。パーサーとメイン アクティビティとの間の通信にハンドラーを使用しているだけです。Thread で解析する必要がありますか?

これが私の主な活動コードです:

        tv = (TextView)findViewById(R.id.tv);

    try {
        URL url = new URL("https://www.googleapis.com/shopping/search/v1/public/products?key=AAAAABBBBBCCCCDDDEEEEFFF&country=FR&restrictBy=gtin=5030999075254&alt=atom");
        XMLHandler xHandler = new XMLHandler();
        Feed feed = xHandler.parse(url.openStream());

            if(feed.getTotalResults()==0 || feed.getItems() == null || feed.getItems().isEmpty()) {
                Log.w("XMLPARSENull", "No items
            }
            else {
                tv.setText(feed.getTotalResults()+" " + feed.getItemsPerPage() + " " + feed.getStartIndex() + " " + feed.getTitle());
                Iterator<Product> it = feed.getItems().iterator();
                while(it.hasNext()) {
                    Log.w("XMLPARSEFeed",it.next().getName());

                }
            }


    } catch(Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.e("XMLPARSEException", "ERROR",e);
    }
4

4 に答える 4

4

UIスレッドではネットワーク要求を実行すべきではないため、ネットワーク操作ほど解析ではないと思います。ネットワーク リクエストを実行するために、 newThreadまたは のいずれかを生成できます。AsyncTask役立つリンクを次に示します。

于 2012-05-06T22:08:43.087 に答える
1

簡単な答え: メイン ( UI ) スレッドに接続がある場合、スレッドが情報のダウンロードと解析に使用されている間、ユーザー インターフェイスがフリーズします。接続に時間がかかるため、フリーズしているように見える場合があります。

それとは別に、Android 4.0 では、実際にはこのスレッドから HTTP リクエストを呼び出すことができなくなりました。クラッシュする前に logcat に表示されるエラーがスローされます。

ここで Async Task を使用するのがベスト プラクティスです。これに関する詳細情報を次に示します。 非同期タスクの情報!

于 2012-05-06T22:43:50.683 に答える
0

はい、特に XML がネットワークを介してストリーミングされている場合は、解析をバックグラウンド スレッドに移動することが不可欠です。そうしないと、メイン スレッドをブロックするためにアプリがシステムによって強制終了される可能性があります。

ただし、 raw を使用する必要はありませんThread。AndroidはASyncTask、それを少し簡単にするようなものを提供します。

于 2012-05-06T21:45:55.017 に答える
0

Android では通常の Thread クラスから GUI にアクセスできないため、GUI との直接的なやり取りに関連しないものはすべて別のスレッドに移動する必要があります。

http://developer.android.com/reference/android/os/AsyncTask.html

于 2012-05-06T23:23:46.220 に答える