【问题标题】:Firebase onComplete never called in Android 10Firebase onComplete 从未在 Android 10 中调用
【发布时间】:2020-12-30 13:45:45
【问题描述】:

我想通过聊天活动 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());

            }
        });
    }
}

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

我到处读到 FirebaseDatabase 操作在后台线程上异步执行

提前感谢您的帮助。

【问题讨论】:

  • 你实现onCancelled()了吗?控制台中是否打印了一些内容?
  • 如果除了成功侦听器之外,您不使用失败侦听器检查错误,您将永远不会知道是否出了问题。

标签: java android firebase firebase-realtime-database android-10.0


【解决方案1】:

我已经创建了如下所示的工作管理器,并覆盖了 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();
        }
    }
}

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多