0

我正在使用以下代码从 json 获取版本

网络服务.java

public void getSingleResponse(final String url) {
        class task extends AsyncTask<String, String, String> {
            @Override
            protected String doInBackground(String... params) {
                // TODO Auto-generated method stub
                String resp;
                resp = "";
                HttpClient httpClient = new DefaultHttpClient();
                try {
                    Log.d("URL", "" + params[0]);
                    HttpResponse response = httpClient.execute(new HttpGet(
                            params[0]));
                    HttpEntity entity = response.getEntity();
                    Log.d("Entity ", "" + entity);
                    String responseString = EntityUtils.toString(entity,
                            "UTF-8");
                    resp = responseString;
                    GlobalVar.Version = resp;
                    Log.v("Global Version", "" + GlobalVar.Version);
                } catch (Exception e) {
                    // TODO: handle exception
                    Log.v("HTTP:::::", "error" + e.getCause());
                }
                return GlobalVar.Version;
            }
        }
        new task().execute(url);
    }

MainActivity.java

public static String getMarketVersion() throws JSONException {
        String version = "";
        try {
            webservice ws = new webservice();
            String serverUrl = SERVER_URL + "/GetVersion";
            Log.i(TAG, "Server URL" + serverUrl);

            ws.getSingleResponse(serverUrl);
            String response = GlobalVar.Version;
            Log.v("Response :: ", "Version ::" + response);

            JSONArray jArry = new JSONArray(response);
            JSONObject jObj = jArry.getJSONObject(0);
            version = jObj.getString("Version");

            Log.v("Parsing ", "Version :: " + version);
            return version;

        } catch (Exception e) {
            e.printStackTrace();
        }
        return version;
    }

当我运行应用程序时,我得到了版本空白,请参阅下面的日志

07-24 12:27:42.309: V/Response ::(4268): Version ::
07-24 12:27:43.389: V/Global Version(4268): [{"Version":"1.1.3"}]

但是当我调试应用程序时,我能够得到响应

07-24 12:06:01.699: V/Global Version(3122): [{"Version":"1.1.3"}]
07-24 12:06:07.349: V/Response ::(3122): Version ::[{"Version":"1.1.3"}]
07-24 12:08:12.019: V/Parsing(3122): Version :: 1.1.3

我不知道发生了什么提前谢谢

4

3 回答 3

1

正如 Kapil Vats 所说,你应该以不同的方式来做。

例如,创建自己的类并扩展它 YourHttpGetter extends AsyncTask<String, Void, String>

用这样的方法创建一个接口

public void onTaskComplete(T result);

在 YourHttpGetter 类的构造函数中,传递将要实现该接口的类 (Activity) 的引用。

覆盖doInBackgroundand onPostExecute,在最后一个中,执行activityImplementingInterface.onTaskComplete(result);

当然,在你的活动中实现接口的方法

@Override
public void onTaskComplete(String json) { do whatever you need }
于 2013-07-24T07:29:47.253 回答
1

首先尝试了解, asyncTask 是如何工作的?doInBackground在与您的 UI 线程不同的线程中工作,在执行 asynctask 后,您必须等到它完成,这意味着您需要覆盖OnPostExecuteasynctask 的方法,然后您将获得您的版本,顺便说一句,您不应该在 android 中使用静态变量共享东西, android 提供了各种方法来做到这一点

于 2013-07-24T07:10:54.573 回答
0

在 AsyncTask 类中添加方法。

protected void onPostExecute(String result){
            GlobalVar.Version = result;
        }
于 2013-07-24T07:33:00.677 回答