0

GUI に関連しないクラスの Android アプリケーションでこのコードを実行しようとしています。

Thread connection = new Thread(new Runnable() {
                public void run() {
                    try {
                        streamSource = new StreamSource(conn.getInputStream());
                        writer = new CharArrayWriter();
                        StreamResult streamResult = new StreamResult(writer);
                        TransformerFactory factory = TransformerFactory.newInstance();
                        Transformer transformer = factory.newTransformer();
                        transformer.transform(streamSource, streamResult);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
              });
        connection.start();

問題は、 writerを呼び出すと、null 値が返されることです。Writer は、streamSource と同様に静的グローバル変数として定義されます。私はスレッドが苦手で、ライターが作成されたことをメインスレッドが認識していないようです。

何か助けはありますか?

4

2 に答える 2

1

変数Writerは別のクラス (スレッド) にあるため、アクセスできません。静的です、それが理論的にアクセスできる原因ですが、他のスレッドには初期化されていません。

必要な場所に変数を作成してください。または、そこで行われている完全なアクションを「外部委託」してください。

EDIT : http://developer.android.com/guide/components/processes-and-threads.html Android のスレッドとプロセスに関する情報を次に示します。

于 2013-01-24T11:57:25.290 に答える
0

ライター オブジェクトを初期化した後、スレッドを開始します。両方のスレッドを同時に実行する必要がある場合、簡単な方法は while ループを実行して、反復ごとにチェックwriter != nullすることですThread.sleep

于 2013-01-24T12:01:11.653 に答える