我希望这不是太多的胡言乱语。我已经实现了异步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;
}
答案 0 :(得分:0)
您的问题有不同的解决方案。但最好的方法是使用Android服务。我会再解释一下你的选择。
我是专门讨论此主题的图书馆的共同作者:RoboSpice。这是一个infographics,解释了为什么使用服务是最好的方法。这就是我们在RoboSpice中所做的事情,我们真的相信这是执行长期后台任务的最佳方式,例如从网上下载数据。
更多RoboSpice提供了不同的模块来帮助您执行REST请求,例如Spring Android模块,Google Http Java Client模块(或Retrofit,即将发布)。
我鼓励你走向这个图书馆,它将为你处理很多背景任务的复杂性。