我如何保持状态';在线';在android中
现在,我正在尝试使用firebase制作一个类似instagram的聊天程序 问题是我想显示成员登录状态 但安卓的生命周期是个问题 这是我的家庭活动代码 用户登录成功后,转到HomeActivty 从这里我决定了在线还是离线 这是我区分在线和离线的代码我如何保持状态';在线';在android中,android,firebase,android-activity,lifecycle,Android,Firebase,Android Activity,Lifecycle,现在,我正在尝试使用firebase制作一个类似instagram的聊天程序 问题是我想显示成员登录状态 但安卓的生命周期是个问题 这是我的家庭活动代码 用户登录成功后,转到HomeActivty 从这里我决定了在线还是离线 这是我区分在线和离线的代码 private void status(String status){ reference = FirebaseDatabase.getInstance().getReference("Users").
private void status(String status){
reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("status", status);
reference.updateChildren(hashMap);
}
@Override
protected void onResume() {
super.onResume();
status("online");
}
@Override
protected void onPause() {
super.onPause();
status("offline");
}
我认为这与活动的生命周期有关
如何保持状态?在Glide尝试加载图像时,问题看起来像是您的
聊天活动被破坏了。您可以使用getApplicationContext()
获取当前上下文。
试图取代
Glide.with(ChatsActivity.this).load(user.getImageurl())到(image\u profile)中;
与
Glide.with(getApplicationContext()).load(user.getImageurl()).into(image\u profile);
此外,还应使用firebase提供的.onDisconnect()
方法检查用户是否存在
建立onDisconnect()操作时,该操作位于Firebase实时数据库服务器上。服务器会检查安全性以确保用户可以执行请求的写入事件,并在应用程序无效时通知用户。然后服务器监视连接。如果在任何时候连接超时,或实时数据库客户端主动关闭连接,服务器将再次检查安全性(以确保操作仍然有效),然后调用该事件
您可以从此中找到更多信息将此依赖项放入您的build.gradle
文件中:
implementation "android.arch.lifecycle:extensions:*"
然后在应用程序类中,使用以下命令:
public class MyApplication extends Application implements LifecycleObserver {
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onAppBackgrounded() {
Log.d("MyApp", "App in background");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onAppForegrounded() {
Log.d("MyApp", "App in foreground");
}
}
@Override
protected void onStart() {
super.onStart();
myRef.child(uid).child("isOnline").setValue(true);
myRef.child(uid).child("isOnline").onDisconnect().setValue(false);
}
更新您的AndroidManifest.xml文件:
<application
android:name=".MyApplication"
....>
</application>
无论用户何时在您的应用程序中,从技术上讲,他都是在线的。因此,在您的家庭活动中,请使用以下方法:
public class MyApplication extends Application implements LifecycleObserver {
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onAppBackgrounded() {
Log.d("MyApp", "App in background");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onAppForegrounded() {
Log.d("MyApp", "App in foreground");
}
}
@Override
protected void onStart() {
super.onStart();
myRef.child(uid).child("isOnline").setValue(true);
myRef.child(uid).child("isOnline").onDisconnect().setValue(false);
}
我还建议添加到override onResume():
确保添加if语句以检查用户是否连接到internet 在哪一行代码中会出现错误?
@Override
protected void onResume() {
super.onResume();
myRef.child(uid).child("isOnline").setValue(true); //User back online
}