异步服务调用需要暂停

时间:2012-12-31 07:18:31

标签: android android-service

我希望这不是太多的胡言乱语。我已经实现了异步Web服务调用,因为我不希望手机/ app / ui在等待数据时锁定....但是我不希望程序继续执行它现在正在做什么并且崩溃。

我的应用程序请求来自服务和服务的数据返回一个xml doc。当服务生成doc时,我的程序继续执行,当它到达代码正在查找文件的部分时崩溃...那还没有。

所以我需要知道一个人在这种情况下如何/在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;

}

1 个答案:

答案 0 :(得分:0)

您的问题有不同的解决方案。但最好的方法是使用Android服务。我会再解释一下你的选择。

我是专门讨论此主题的图书馆的共同作者:RoboSpice。这是一个infographics,解释了为什么使用服务是最好的方法。这就是我们在RoboSpice中所做的事情,我们真的相信这是执行长期后台任务的最佳方式,例如从网上下载数据。

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

我鼓励你走向这个图书馆,它将为你处理很多背景任务的复杂性。

相关问题