繁体   English   中英

从Restful Web服务异步访问数据

[英]Accessing data from Restful web service asynchronously

我正在编写一个Android应用程序,其中所有数据都使用Web服务公开。 我正在编写一个包装器类,以从称为DataManager的服务中获取数据。

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。 我如何重构此代码并从Web服务获取值并异步返回这些值。 [注意]我正在为某些团队成员编写此文件,以便他们可以使用它来从服务中获取数据,因此我希望它可以轻松使用。

使用AsyncTaskIntentService 在Android上,在UI线程上进行联网(通常需要很长时间)。

在这里,您获得了AsyncTask基础知识和一些教程,并且在这里获得了IntentService基础知识教程。

我本人会使用AsyncTask(IntentService的作业已排队),但请注意在较新的API中处理方式的更改 不过没什么大不了的(仅几行代码)

我建议尝试一下David Chandler的Android 基本HTTP客户端库。

最好的方法是使用IntentService。 这样就为您提供了后台线程,并为您传递了URL。 根据您拥有的数据量,您可以将其转储到本地文件中或将其存储在数据库中。

如果执行数据库路由,则可以使用AsyncTaskLoader在活动中异步加载数据,或者使用AsyncTask进行完全访问。 并且,通过一些额外的开销和更简单的编码,您可以将数据粘贴到ContentProvider中,然后在Activity中使用CursorLoader。

最重要的是,永远不要在UI线程上执行网络操作或数据库操作。 将您的“活动”用作“演示者”(智能“视图”),并将所有控制器和模型内容置于后台。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM