0

我有两个按钮。我需要使用两个按钮进行两个不同的网络呼叫。但需要使用单线程通过。如果我使用下面的代码,线程类没有返回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

你的代码设计得很奇怪:

    JSONObject json = jParser.getJSONFromUrl(URL);

    return json;

不要使用相同的 json 对象,它们只是共享一个名称但不是同一个变量。第一个的范围仅限于您的运行方法。您无法在此范围之外获得有关它的参考。

于 2012-11-28T07:21:07.117 回答
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 回答