2

我希望这不是太胡说八道。我已经实现了一个异步网络服务调用,因为我不希望手机/应用程序/用户界面在等待数据时锁定......但是我不希望程序继续执行它现在正在做的事情并崩溃.

我的应用程序从服务请求数据,服务返回一个 xml 文档。当服务正在生成文档时,我的程序继续执行并在到达代码正在查找文件的部分时崩溃……那还不存在。

所以我需要知道在这种情况下一个人在java中是如何/做什么的?在 C# 中,我知道该怎么做。这是异步调用的代码,请随时指出其中的任何问题。

public class DataExchangeServiceClient
{
private static final String BASE_URL = "http://www.icyarmtesting.com/";

private static AsyncHttpClient client = new AsyncHttpClient();

public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) 
{
    client.get(getAbsoluteUrl(url), params, responseHandler);
}

public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) 
{
      client.post(getAbsoluteUrl(url), params, responseHandler);
  }

  private static String getAbsoluteUrl(String relativeUrl) 
  {
      return BASE_URL + relativeUrl;
  }

}

然后是实现......是的,我知道它现在是硬编码的。

protected static boolean GetExerciseData() throws JSONException
{
    RequestParams params = new RequestParams();
    params.put("Action", "");
    params.put("ProgramID", "8008009");
    params.put("UserName", "joex");
    params.put("Password", "dude!");


    DataExchangeServiceClient.get("liftdataexchange.xamlx", params, new JsonHttpResponseHandler()
    {
        @Override
        public void onSuccess(JSONArray timeline)
        {
            try
            {
            JSONObject firstEvent = (JSONObject) timeline.get(0);
            String XML_DOC_String = firstEvent.getString("text");
            }
            catch(JSONException jse)
            {

            }
            //send it off to become a document
        }
    });

    return true;

}
4

1 回答 1

0

您的问题有不同的解决方案。但最好的方法是使用 Android 服务。我将解释更多你的选择。

我是一个致力于这个主题的图书馆的合著者:RoboSpice。这是一个信息图表,解释了为什么使用服务是最好的方法。这就是我们在 RoboSpice 中所做的事情,我们坚信这是执行长时间运行的后台任务(例如从 Web 下载数据)的最佳方式。

更多 RoboSpice 提供了不同的模块来帮助您执行 REST 请求,例如Spring Android模块、Google Http Java 客户端模块(或Retrofit,即将发布)。

我鼓励你转向这个库,它会为你处理很多复杂的后台任务。

于 2012-12-31T07:28:01.873 回答