Android我可以使用Looper进行递归回调HTTP服务请求吗?

Android我可以使用Looper进行递归回调HTTP服务请求吗?,android,android-service,android-looper,Android,Android Service,Android Looper,在我们的Android应用程序中,我们使用第三方供应商提供聊天服务。我们需要为用户创建会话,然后登录使用服务,然后获取消息。所有这些都是单独的HTTP请求,需要在成功回调中调用它们。那么,我怎样才能做到这一点,如下所示 ExternalService.createSession(param1, param2, new Callback<Session>() { void onSuccess(Session session) { ses

在我们的Android应用程序中,我们使用第三方供应商提供聊天服务。我们需要为用户创建会话,然后登录使用服务,然后获取消息。所有这些都是单独的HTTP请求,需要在成功回调中调用它们。那么,我怎样才能做到这一点,如下所示

   ExternalService.createSession(param1, param2, new Callback<Session>() {

        void onSuccess(Session session) {
             session.login(new Callback<User> {


             void onSuccess(User user) {

                 user.getMessages(new Callback<List<Messages>> {

                      void onSuccess(List<Messages> messages) {
                         // This is original place where everything is success
                      }

                      void onError(Error error) {


                      }

                 } 
             }

             void onError(Error error) {


             }
        }

        void onError(Error error) {

        }

   });
ExternalService.createSession(param1,param2,new Callback()){
成功时无效(会话){
session.login(新回调){
成功时无效(用户){
user.getMessages(新回调){
成功时无效(列出消息){
//这是一个一切都成功的地方
}
void onError(错误){
}
} 
}
void onError(错误){
}
}
void onError(错误){
}
});

如果我在
活动中运行
,它工作正常没有问题。如何在
服务中运行
?因为在
服务
中,我在运行
异步任务
时也有问题,抛出错误
“无法在未调用Looper.prepare()的线程内创建处理程序”
服务
在调用
异步任务
并到达
手动操作
块的末尾后退出。(我理解,这是
服务
的行为)。但是,如果不使用
Looper
,我如何实现?或者如果没有其他方法可以不使用
Looper
,我如何在完成我需要的之后停止它?最好的方法是什么?假设没有UI交互(因为您正在从服务运行代码),只需将
AsyncTask
转换为
Runnable
,并在其周围包装一个
线程

new Thread(new Runnable {

  @Override
  void run() {
      // whatever happens in AsyncTask.doInBackground goes in here
  }

}).start();
您可以使用一个脚本来执行这样的后台操作

它基本上执行在专用后台线程中顺序传递给它的工作请求

onHandleIntent()
方法中,您可以按顺序定义API调用序列,甚至不需要回调来提高代码的可读性(当然,如果您的库支持阻塞调用)

比如:


//这只是一段伪代码,给出了如何工作的想法
@凌驾
手部内容上的受保护无效(意图工作内容){
会话=createSession();
User=session.login();
List messages=user.getMessages();
}

之所以可以这样做,是因为
onHandleIntent()
方法中发生的所有事情都发生在后台线程中,因此这些操作不会阻塞UI

例如,您可以查看官方的用法


需要注意的一点是,您不能通过此服务直接操作UI。要与活动进行通信,您可以使用此方法。教程中也解释了这一点。

这篇文章可能会有所帮助。我认为这是正确的答案,但@adelphus让我检查并确认。但是,如果库不支持bloc怎么办king调用?然后你可以像平常一样在
OnHandleContent
中使用回调方法。这只是一个选项,如果存在就是一切,那么事情会变得更容易。