Java Firebase onComplete在Android 10中从未调用过
我想更改firebase实时数据库中聊天活动onResume和onPause方法的状态(在线/离线) 我的代码如下:Java Firebase onComplete在Android 10中从未调用过,java,android,firebase,firebase-realtime-database,android-10.0,Java,Android,Firebase,Firebase Realtime Database,Android 10.0,我想更改firebase实时数据库中聊天活动onResume和onPause方法的状态(在线/离线) 我的代码如下: @Override protected void onResume() { super.onResume(); updateStatus(Constants.getInstance().userStatusOnline); } @Override protected void onPause() { super.onPause(); update
@Override
protected void onResume() {
super.onResume();
updateStatus(Constants.getInstance().userStatusOnline);
}
@Override
protected void onPause() {
super.onPause();
updateStatus(Constants.getInstance().userStatusOffline);
}
public void updateStatus(String status) {
Log.e(TAG, "## updateStatus status : " + status);
if (myUserId != null) {
databaseReference = FirebaseDatabase.getInstance().getReference(Constants.getInstance().fb_table_user).child(myUserId);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("status", status);
databaseReference.updateChildren(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.e(TAG, "******* updateStatus onComplete isSuccessful :: " + task.isSuccessful());
}
});
}
}
@覆盖
受保护的void onResume(){
super.onResume();
updateStatus(Constants.getInstance().userStatusOnline);
}
@凌驾
受保护的void onPause(){
super.onPause();
updateStatus(Constants.getInstance().userStatusOffline);
}
公共void updateStatus(字符串状态){
Log.e(标记“##updateStatus:”+状态);
if(myUserId!=null){
databaseReference=FirebaseDatabase.getInstance().getReference(Constants.getInstance().fb_table_user).child(myUserId);
HashMap HashMap=新的HashMap();
hashMap.put(“状态”,status);
databaseReference.updateChildren(hashMap.addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
Log.e(标记,“******updateStatus onComplete isSuccessful::”+task.isSuccessful());
}
});
}
}
它在其他android版本中运行良好,但是
Android 10中未调用onComplete方法。
我也尝试过更新作业调度器和工作管理器中的孩子,但没有成功
我到处都读到过
FirebaseDatabase操作在后台线程上异步执行
提前感谢您的帮助。我已经创建了下面这样的工作管理器,并覆盖了addOnFailureListener和addOnCanceledListener方法及其现在的工作状态
public class ChangeStatusScheduler extends Worker {
private String TAG = "ChangeStatusScheduler";
private String status,userId;
public ChangeStatusScheduler(@NonNull Context appContext, @NonNull WorkerParameters params) {
super(appContext, params);
status = params.getInputData().getString(Constants.getInstance().fb_user_status);
userId = params.getInputData().getString(Constants.getInstance().fb_user_id);
}
@NonNull
@Override
public Result doWork() {
Log.e(TAG, "******* doWork");
try {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put(Constants.getInstance().fb_user_status, status);
DatabaseReference statusRef = FirebaseDatabase.getInstance().getReference(Constants.getInstance().fb_table_user)
.child(userId);
statusRef.updateChildren(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.e(TAG, "******* onComplete");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();
Log.e(TAG, "******* onFailure ee :: " + e.getMessage());
}
}).addOnCanceledListener(new OnCanceledListener() {
@Override
public void onCanceled() {
Log.e(TAG, "******* onCanceled");
}
});
}catch (Exception ee){
Log.e(TAG, "******* updateStatus ee :: " + ee.getMessage());
ee.printStackTrace();
}
return Result.success();
}
}
我已经创建了如下所示的工作管理器,覆盖了addOnFailureListener和addOnCanceledListener方法及其现在的工作状态
public class ChangeStatusScheduler extends Worker {
private String TAG = "ChangeStatusScheduler";
private String status,userId;
public ChangeStatusScheduler(@NonNull Context appContext, @NonNull WorkerParameters params) {
super(appContext, params);
status = params.getInputData().getString(Constants.getInstance().fb_user_status);
userId = params.getInputData().getString(Constants.getInstance().fb_user_id);
}
@NonNull
@Override
public Result doWork() {
Log.e(TAG, "******* doWork");
try {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put(Constants.getInstance().fb_user_status, status);
DatabaseReference statusRef = FirebaseDatabase.getInstance().getReference(Constants.getInstance().fb_table_user)
.child(userId);
statusRef.updateChildren(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.e(TAG, "******* onComplete");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();
Log.e(TAG, "******* onFailure ee :: " + e.getMessage());
}
}).addOnCanceledListener(new OnCanceledListener() {
@Override
public void onCanceled() {
Log.e(TAG, "******* onCanceled");
}
});
}catch (Exception ee){
Log.e(TAG, "******* updateStatus ee :: " + ee.getMessage());
ee.printStackTrace();
}
return Result.success();
}
}
您是否实现了OnCancell()?控制台中是否有打印出来的内容?如果除了成功的侦听器之外,不使用失败的侦听器检查错误,则永远不会知道是否有错误。是否实现了onCancelled()?控制台中是否有打印出来的内容?如果除了成功的监听器之外,您不使用失败的监听器检查错误,您将永远不会知道是否出现了错误。