Firebase onComplete从未在Android 10中调用过



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

我的代码如下:

@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());
}
});
}
}

它在其他安卓版本中运行良好,但onComplete方法在Android 10中未被调用。我也尝试过在作业调度程序和作业管理器中更新Children,但没有成功。

我到处都读到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();
}
}

并打电话给下面的工作经理

@Override
protected void onStop() {
super.onStop();
Log.e(TAG, "******* chat onStop backClicked :: " + backClicked);
if (!backClicked) {
try {
Data inputData = new Data.Builder()
.putString(Constants.getInstance().fb_user_status, Constants.getInstance().userStatusOffline)
.putString(Constants.getInstance().fb_user_id, myUserId).build();
final OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(ChangeStatusScheduler.class).setInputData(inputData).build();
WorkManager.getInstance().enqueue(workRequest);
} catch (Exception ee) {
Log.e(TAG, "******* updateStatus ee :: " + ee.getMessage());
ee.printStackTrace();
}
}
}

最新更新