Java 从Restful web服务异步访问数据
我正在编写一个android应用程序,其中所有数据都是使用web服务公开的。我正在编写一个包装器类来从名为DataManager的服务中获取数据Java 从Restful web服务异步访问数据,java,android,web-services,Java,Android,Web Services,我正在编写一个android应用程序,其中所有数据都是使用web服务公开的。我正在编写一个包装器类来从名为DataManager的服务中获取数据 public class DataManager{ public DataManager (){} public String getValue () { HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet ("some url");
public class DataManager{
public DataManager (){}
public String getValue ()
{
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet ("some url");
try
{
HttpResponse response = client.execute(get);
if (response.getStatusLine ().getStatusCode() == 200)
{
HttpEntity entity = response.getEntity ();
String result = EntityUtils.toString(entity);
return result;
}
}
catch (ClientProtocolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
当我调用此方法时,UI线程上会生成一个RuntimeException。我如何重构这个
编码并从webservice获取值,然后异步返回这些值。[注意]我是为一些团队成员写这篇文章的,这样他们可以使用它从服务中获取数据,因此我希望它能够方便他们使用 使用
AsyncTask
或IntentService
。在UI线程上进行联网(通常是冗长的操作)在Android上是不行的
这是你带的和一些
这是你和
我自己也会使用AsyncTask(IntentService的作业是排队的),但最好是这样。虽然使用
AsyncTask
或IntentService
,但这没什么大不了的(只是多了几行代码)。在UI线程上进行联网(通常是冗长的操作)在Android上是不行的
这是你带的和一些
这是你和
我自己也会使用AsyncTask(IntentService的作业是排队的),但最好是这样。没什么大不了的(只是多了几行代码),不过我建议试试David Chandler的Android库。我建议试试David Chandler的Android库。最好的方法是使用IntentService。这为您提供了一个后台线程和一种传递URL的方法。根据您拥有的数据量,您可以将其转储到本地文件或存储在数据库中 如果执行数据库路由,则可以使用AsyncTaskLoader在活动中异步加载数据,或者使用AsyncTask执行完全访问。而且,通过一些额外的开销,但编码要简单得多,您可以将数据粘贴到ContentProvider中,然后在活动中使用游标加载程序
最重要的是,不要在UI线程上执行网络操作或数据库操作。将您的活动作为“演示者”(智能“视图”)使用,并将所有控制器和模型的内容放在后台。最好的方法是使用IntentService。这为您提供了一个后台线程和一种传递URL的方法。根据您拥有的数据量,您可以将其转储到本地文件或存储在数据库中 如果执行数据库路由,则可以使用AsyncTaskLoader在活动中异步加载数据,或者使用AsyncTask执行完全访问。而且,通过一些额外的开销,但编码要简单得多,您可以将数据粘贴到ContentProvider中,然后在活动中使用游标加载程序
最重要的是,永远不要在UI线程上执行网络操作或数据库操作。将您的活动作为“演示者”(智能“视图”)使用,并将所有控制器和模型的内容放在后台。AsyncTask作业也在较新版本中排队,这是一项功能,而不是一个bug。多个并发线程很难正确管理。对于从RESTful web服务下载数据,可能对同时处理的需求不大;很难想象现实生活中需要从同一个IntentService运行多个下载的场景。我回答的最后一段中的链接涉及排队异步任务的回归。诀窍是你可以摆脱它,因为IntentService作业是按设计排队的。我写了几个移动客户端,有很多场景需要同时访问。因此,我使用AsyncTask(当然是通过
executeOnExecutor()
)进行联网,而不是IntentService。AsyncTask作业也在较新版本中排队,这是一项功能,而不是一个bug。多个并发线程很难正确管理。对于从RESTful web服务下载数据,可能对同时处理的需求不大;很难想象现实生活中需要从同一个IntentService运行多个下载的场景。我回答的最后一段中的链接涉及排队异步任务的回归。诀窍是你可以摆脱它,因为IntentService作业是按设计排队的。我写了几个移动客户端,有很多场景需要同时访问。因此,我使用AsyncTask(当然是通过executeOnExecutor()
)进行网络连接,而不是使用IntentService。如何使用IntentService实现这一点,并与上面实现的效果相同。例如,我希望有人调用datamanager类从webservice获取数据。DataManager将把数据移交给intentService,并在服务获取数据并将其交回DataManager后将结果返回给用户。所以一个调用看起来像DataManager data=newdatamanager();data.getValue。问题是如何让dataManager从intentservice取回数据?(我有点迷路了,请告诉我)我如何通过intentservice获取数据,并与上面实现的效果相同。例如,我希望有人调用datamanager类从webservice获取数据。DataManager将把数据移交给intentService,并在服务获取数据并将其交回DataManager后将结果返回给用户。所以一个调用看起来像DataManager data=newdatamanager();data.getValue。问题是如何让dataManager从intentservice取回数据?(我有点迷路了,请跟我说)