下面的代码我试图删除一个会员,应该删除一个会员及其详细信息和所有费用记录。
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) 我正在扩展 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"一切正常,但是有了该属性,我们无法在芯片上绘制任何内容。我尝试了所有方法,但无法弄清楚为什么会发生这种情况。
请帮忙
要求
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 …
我写了一个 Java 程序,然后编译它,然后反编译它并得到一个 Java 文件。反编译器将精确缩进的精确 Java 文件返回给我的原始 Java 文件,但这就是反编译器所做的,这不是问题,在我脑海中燃烧的问题是缩进。
由于反编译的 Java 文件与原始文件具有完全相同的缩进,因此我得出结论,类文件也存储了缩进数据。
现在的问题如下:
如果是:
为什么类文件需要知道缩进?
缩进是为了可读性,没有人读取类文件,那么为什么类文件不能存储它并节省一些空间呢?
类文件只是一个加密的 Java 源文件,反编译器可以在其中解密以返回原始文件吗?