0

次で作成された新しいスレッドから変数を取得するにはどうすればよいですか:

public class ParseJson 
{
    public static String parsejson(String strHttpGet)
    {
        Thread thread = new Thread(new Runnable()
        {
            public String run(String strHttpGet)
            {
                String decodeJson = "someJson";
                return decodeJson;
            }
        });
            thread.start();
    }
}

デコードされたjsonを関数parseJsonに戻し、関数呼び出しに戻すにはどうすればよいString decodedJson = ParseJson.parseJson(strHttpGet);ですか?

4

4 に答える 4

1

Java ではa から値を返すことはできません。Thread実際にrun()は、戻り値の型はありません。

Object結果を保持する共有カスタムを使用できます。として宣言してfinal、匿名サブクラスでアクセスできるようにし (サブクラスへの参照を渡すのと同じです)、作業が完了したらセッターを呼び出すだけです。

public class ParseJson {
    public static String parsejson(final String strHttpGet) {
        final StringHolder ob = new MyObject();
        Thread thread = new Thread() {
            public String run() {
                String decodeJson = "someJson";
                ob.setResult(decodeJson);
            }
        };
        thread.start();
    }
    private static class StringHolder (){
        private String result;
        public String getResult() { return result; }
        public void setResult(String r) { result = r; }
    }
}

デコードされた json を関数 parseJson に戻し、それを関数 call に戻すと言った理由がわかりません。終了するまでその機能で待つということThreadですか?それが必要な場合 (繰り返しますが、なぜ開始するのThreadですか?)、 を使用できますThread.join()

ただし、終了時に通知を受け取りたい場合は、Thread別のオプションを検討する必要があります. Neil と Waqas は良い アプローチをしてくれました。

于 2013-04-12T11:49:18.597 に答える
1

この質問にタグを付けたアンドロイドでは、この状況で AsyncTask を使用する方が簡単です。onPostEXecuteメソッドをオーバーライドすると、あらゆる種類のものを入れることができるからです。

于 2013-04-12T11:59:41.553 に答える
0

Observer/Observableこれにはパターンを使用することもできます。

于 2013-04-12T11:50:53.963 に答える