Java Firebase onComplete在Android 10中从未调用过

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

我想更改firebase实时数据库中聊天活动onResume和onPause方法的状态(在线/离线)

我的代码如下:

@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()?控制台中是否有打印出来的内容?如果除了成功的监听器之外,您不使用失败的监听器检查错误,您将永远不会知道是否出现了错误。