0

私は2つのボタンを持っています。2 つのボタンを使用して 2 つの異なる Web 呼び出しを取得する必要があります。ただし、シングル スレッド スルーを使用する必要があります。以下のコードのように使用すると、スレッド クラスはjson応答を返しませんでした。値を返しnullます。この問題を解決するにはどうすればよいですか?

私のスレッドクラス:

public static json runDialogLogin(String URL) {

    JSONObject json;

    JSONParser jParser = new JSONParser();
    new Thread() {
        public void run() {
            try {
                // getting JSON string from URL
                json = jParser.getJSONFromUrl(URL);
            } catch (Exception e) {

                e.printStackTrace();
            }
        }

    }.start();
    return json;
}

私のメインクラス:

.....

@Override
public final void onClick(final View v) {
    switch (v.getId()) {
        case R.id.button1:
            json= runDialogLogin("My URL1");
            if(json!=null){
                Intent i=new Intent(this,result1.class);
                startActivity(i);

                case R.id.button2:
                json= runDialogLogin("My URL2");
                if(json!=null){
                    Intent i=new Intent(this,result2.class);
                    startActivity(i);
                }
            }
    }
4

2 に答える 2

0

を開始しthread、すぐにスレッドから結果を返します。サーバーから応答が来るまで待ってから、それを返します。

コードは次のようになります

new Thread() {
    public void run() {
        try {
            // getting JSON string from URL
            JSONObject json = jParser.getJSONFromUrl(URL);

            // wait till you get the response from the server and then return the json object here only.
            return json;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}.start();
于 2012-11-28T07:27:20.773 に答える
0

あなたのコードは奇妙に設計されています:

    JSONObject json = jParser.getJSONFromUrl(URL);

    return json;

同じjsonオブジェクトを使用しないでください。名前を共有するだけで、同じ変数ではありません。最初のものは、実行メソッドに限定されたスコープを持っています。この範囲外では参照を取得できません。

于 2012-11-28T07:21:07.117 に答える