【发布时间】:2023-04-08 06:58:01
【问题描述】:
我为 Android 开发了一个测验应用程序。我使用 google firestore 来存储我的问题。我使用以下代码从 Firestore 中获取问题。在这段代码中,第一组问题很好地检索。但是当我打开另一个问题集合(“SET”)时,应用程序崩溃了。如何在不使应用程序崩溃的情况下获取集合。请帮忙。
private void getQuestionList() {
questionList.clear();
firestore.collection("QUIZ").document("CAT" + String.valueOf(category_id)).collection("SET" + String.valueOf(setNo))
.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()){
QuerySnapshot questions = task.getResult();
for (QueryDocumentSnapshot doc : questions){
questionList.add(new Question(doc.getString("QUESTION"),
doc.getString("A"),
doc.getString("B"),
doc.getString("C"),
doc.getString("D"),
Integer.valueOf(doc.getString("ANSWER"))
));
} setQuestion();
}else {
Toast.makeText(QuestionsActivity.this,task.getException().getMessage(),Toast.LENGTH_SHORT).show();
}
}
});
}
Firestore 数据库结构
Logcat 消息
07-30 13:22:51.835 28139-28139/com.supun.mcqapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.supun.mcqapp, PID: 28139
java.lang.RuntimeException: Field 'ANSWER' is not a java.lang.String
at com.google.firebase.firestore.DocumentSnapshot.castTypedValue(DocumentSnapshot.java:499)
at com.google.firebase.firestore.DocumentSnapshot.getTypedValue(DocumentSnapshot.java:491)
at com.google.firebase.firestore.DocumentSnapshot.getString(DocumentSnapshot.java:361)
at com.supun.mcqapp.QuestionsActivity$1.onComplete(QuestionsActivity.java:102)
at com.google.android.gms.tasks.zzj.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:819)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:210)
at android.app.ActivityThread.main(ActivityThread.java:5982)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)
07-30 13:22:51.985 2369-22884/? E/SQLiteDatabase: Error inserting source=16 tag=Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG requires_charging=0 target_package=com.google.android.gms source_version=19831000 required_network_type=0 flex_time=2183000 target_class=com.google.android.gms.measurement.PackageMeasurementTaskService runtime=1627631571923 retry_strategy={"maximum_backoff_seconds":{"3600":0},"initial_backoff_seconds":{"30":0},"retry_policy":{"0":0}} last_runtime=0 period=4368000 task_type=0 job_id=-1 user_id=0
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: pending_ops.tag, pending_ops.target_class, pending_ops.target_package, pending_ops.user_id (Sqlite code 2067), (OS error - 2:No such file or directory)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:799)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1401)
at aqnp.a(:com.google.android.gms@19831020@19.8.31 (040406-284611645):162)
at aqne.a(:com.google.android.gms@19831020@19.8.31 (040406-284611645):163)
at aqne.a(:com.google.android.gms@19831020@19.8.31 (040406-284611645):24)
at aqne.a(:com.google.android.gms@19831020@19.8.31 (040406-284611645):156)
at aqjx.run(:com.google.android.gms@19831020@19.8.31 (040406-284611645):8)
at tfd.b(:com.google.android.gms@19831020@19.8.31 (040406-284611645):15)
at tfd.run(:com.google.android.gms@19831020@19.8.31 (040406-284611645):10)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at tld.run(:com.google.android.gms@19831020@19.8.31 (040406-284611645))
at java.lang.Thread.run(Thread.java:833)
07-30 13:22:51.990 2369-22884/? E/SQLiteDatabase: Error inserting source=16 tag=Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG requires_charging=0 target_package=com.google.android.gms source_version=19831000 required_network_type=0 flex_time=2183000 target_class=com.google.android.gms.measurement.PackageMeasurementTaskService runtime=1627631571960 retry_strategy={"maximum_backoff_seconds":{"3600":0},"initial_backoff_seconds":{"30":0},"retry_policy":{"0":0}} last_runtime=0 period=4368000 task_type=0 job_id=-1 user_id=0
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: pending_ops.tag, pending_ops.target_class, pending_ops.target_package, pending_ops.user_id (Sqlite code 2067), (OS error - 2:No such file or directory)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:799)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1401)
at aqnp.a(:com.google.android.gms@19831020@19.8.31 (040406-284611645):162)
at aqne.a(:com.google.android.gms@19831020@19.8.31 (040406-284611645):163)
at aqne.a(:com.google.android.gms@19831020@19.8.31 (040406-284611645):24)
at aqne.a(:com.google.android.gms@19831020@19.8.31 (040406-284611645):156)
at aqjx.run(:com.google.android.gms@19831020@19.8.31 (040406-284611645):8)
at tfd.b(:com.google.android.gms@19831020@19.8.31 (040406-284611645):15)
at tfd.run(:com.google.android.gms@19831020@19.8.31 (040406-284611645):11)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at tld.run(:com.google.android.gms@19831020@19.8.31 (040406-284611645))
at java.lang.Thread.run(Thread.java:833)
夏天-logcat E/MultiWindowProxy: getServiceInstance failed!
【问题讨论】:
-
分享你得到的错误日志
-
如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。请回复@AlexMamo
-
@AlexMamo 我用 logcat 数据更新了问题。
-
请同时向我们展示您的 QUESTION1 文档的内容,以便我们查看 A、B、C、D 字段。请回复@AlexMamo
-
我只是解决问题。 Firestore 结构有问题。我输入了答案作为数字。当我将它转换为字符串时问题解决了。谢谢大家。
标签: java android firebase google-cloud-firestore