小编Abh*_*han的帖子

为什么会出现此错误:java.lang.IllegalStateException:调用 commit() 后无法再使用写入批处理

下面的代码我试图删除一个会员,应该删除一个会员及其详细信息和所有费用记录。

 public void deleteMember(Member member) {
    final WriteBatch batch = FirebaseFirestore.getInstance().batch();
    DocumentReference memberDoc = getMemberReference().document(member.getMemberId());
    batch.delete(memberDoc);
             getFeeReference().whereEqualTo("id", member.getMemberId())
            .get()
            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                @Override
                public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                    for(QueryDocumentSnapshot snapshot : queryDocumentSnapshots){
                        batch.delete(snapshot.getReference()); // this is the line of error
                    }
                }
            });
    batch.commit();
    getMemberImagesReference().child(member.getMemberId() + "t.jpg").delete();
    getMemberImagesReference().child(member.getMemberId() + "f.jpg").delete();
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误

 2020-04-10 22:57:33.462 29454-29454/com.abhinav.chauhan.gymdatamanager D/AndroidRuntime: Shutting 
 down VM
 2020-04-10 22:57:33.464 29454-29454/com.abhinav.chauhan.gymdatamanager E/AndroidRuntime: FATAL 
 EXCEPTION: main
 Process: com.abhinav.chauhan.gymdatamanager, PID: 29454
 java.lang.IllegalStateException: A write batch can no longer be used after …
Run Code Online (Sandbox Code Playgroud)

android firebase google-cloud-firestore

5
推荐指数
1
解决办法
1774
查看次数

文本对齐居中时无法在芯片上绘图

我正在扩展 Chip 类来为我的lib执行一些绘图,我的用例更复杂,但为了简单起见,假设我只是画一条对角线

我的代码

class MyChip (context: Context,attributeSet: AttributeSet) : Chip(context,attributeSet){

override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    //just want to draw a diagonal line
    canvas.drawLine(0f,0f,width/1f,height/1f,paint)
  }
 }
Run Code Online (Sandbox Code Playgroud)

xml

<com.abhinav.chouhan.loaderchipdemo.MyChip
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:textAlignment="center"
    android:text="SOME TEXT"/>
Run Code Online (Sandbox Code Playgroud)

当我没有属性时,android:textAlignment="center"一切正常,但是有了该属性,我们无法在芯片上绘制任何内容。我尝试了所有方法,但无法弄清楚为什么会发生这种情况。

请帮忙

android material-design android-chips

5
推荐指数
1
解决办法
166
查看次数

我无法在 Firebase 中重新验证或撤销用户的访问令牌

要求

1 . 我想让用户选择删除他/她的帐户,而现在用户可以使用 Google 和手机登录。

我阅读了一些文档,结果证明如果我可以重新验证用户身份,我可以轻松删除该帐户,但我无法这样做。

这是我用来重新验证帐户的代码

目前我只是在尝试使用 Google。

 final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(getActivity());
    if(account != null && user != null) {
        AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
        user.reauthenticate(credential)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG,"reauthenticated");
                    }
                })
Run Code Online (Sandbox Code Playgroud)

它会产生一个错误,即

com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: The supplied auth credential is malformed or has expired. [ ID Token issued at 1587271042 is stale to sign-in.

通过阅读一些文档,我也明白如果我没有错,这是因为令牌的有效期为一小时,而我正在尝试在一小时后访问它。也就是说,为什么我会收到此错误?

我包含了此代码,以便您可以告诉我另一种方法。

我也知道另一种方式,我试过:

通过Delete account点击按钮,我可以通过弹出一个谷歌帐户对话框来启动谷歌登录流程,以便用户可以再次登录,因为这将是一个全新的登录,那么我可以说它user.delete()会删除帐户,但由于三个原因,它不是一个好的选择:

1用户会思考为什么他/她必须再次选择一个帐户

2我无法更改该对话框的标题。它将始终具有标题选择帐户以继续“我的应用程序名称”,这并不反映我删除帐户的意图。

3 …

android firebase firebase-authentication

3
推荐指数
1
解决办法
1035
查看次数

Java 类文件知道空格吗?

我写了一个 Java 程序,然后编译它,然后反编译它并得到一个 Java 文件。反编译器将精确缩进的精确 Java 文件返回给我的原始 Java 文件,但这就是反编译器所做的,这不是问题,在我脑海中燃烧的问题是缩进。

由于反编译的 Java 文件与原始文件具有完全相同的缩进,因此我得出结论,类文件也存储了缩进数据。

现在的问题如下:

  1. 我的结论正确吗?

如果是:

  1. 为什么类文件需要知道缩进?

  2. 缩进是为了可读性,没有人读取类文件,那么为什么类文件不能存储它并节省一些空间呢?

  3. 类文件只是一个加密的 Java 源文件,反编译器可以在其中解密以返回原始文件吗?

java decompiler

1
推荐指数
1
解决办法
129
查看次数