每分钟将数据发送到服务器(对于检查状态用户)

时间:2019-06-27 05:23:23

标签: java android alarmmanager

对于支票状态用户,我应该每隔5分钟通过Retrofit2将一些数据发送到服务器。

当然,应该在用户使用应用程序时发送此信息

这意味着当用户退出应用程序时,无需向服务器发送任何内容

最好的方法是什么?

对于连接到服务器,我使用Retrofit2。

3 个答案:

答案 0 :(得分:1)

一种解决方案是使用Android的工作管理器通过http请求对您的服务器执行ping操作。您可以在用户登录时创建初始的OneTimeWorkRequest,并在每次执行时创建一个延迟5分钟的新OneTimeWorkRequest。当用户退出应用程序时,取消所有工作请求。

请参阅Jetpack库:https://developer.android.com/topic/libraries/architecture/workmanager

您需要对其体系结构进行更改的另一种解决方案是将Sockets与SocketIO之类的库一起使用。当用户登录通知服务器用户在线时,从您的应用程序连接套接字。当套接字断开连接服务器可以将用户标记为脱机时:https://socket.io/blog/native-socket-io-and-android/

另一种解决方案是将Firebase Realtime数据库用于在线状态系统。 Firebase给出了一个很好的示例:https://firebase.googleblog.com/2013/06/how-to-build-presence-system.html

答案 1 :(得分:0)

您可以在服务中编写此代码,并使用处理程序或RxJava每5分钟进行一次网络通话;

public class YourService extends Service{

 public final Handler handler = new Handler();




   @Override
    public void onCreate() {

    makeCallEvery5Min();
    }



private void makeCallEvery5Min(){
 runnable = new Runnable() {
            @Override
            public void run() {

            // execute call here 
            }

             handler.postDelayed(runnable, delay);

}


}


}

RXJava

  private void makeCallEvery5min() {
        Observable.interval(0, 5, TimeUnit.MINUTES)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(v -> your_network_call() );
    }

答案 2 :(得分:-1)

可以帮助您以下方法

如果用户已登录,则应具有用户ID。

现在尝试在用户登录会话中检查特定用户的用户ID。

注意:以下代码应添加到网页(jsp或servlet)中。

  1. 单一用户方法:if(userId == Session.getUserId(userId)){response.refresh(5); //编写代码以使用Retrofit2将数据发送到服务器。}
  2. 多用户方法:多个用户登录。if(Session.getUsers()!= null){response.refresh(5); //编写代码以使用Retrofit2将数据发送到服务器}