Java / Android / FireStore QuerySnapshot转换为CustomObject
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java / Android / FireStore QuerySnapshot转换为CustomObject,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4946字,纯文字阅读大概需要8分钟。
内容图文
![Java / Android / FireStore QuerySnapshot转换为CustomObject](/upload/InfoBanner/zyjiaocheng/686/7d2bb483d6d9475aa9643b3d239d6c2a.jpg)
我目前正在测试QuizApp中进行编程.游戏玩法非常简单,我只想要一个在线问题数据库,用户就可以回答.
这是数据库的样子:
该集合问题包含一个唯一的ID和一个名为“ content”的自定义对象(questionObject).该数字只是我可以查询/搜索的简单内容.
这是我的questionAdder和查询UI.这只是一个小型测试应用程序.
公共类questionAdder扩展了AppCompatActivity {
EditText pQuestion, pAnwerA, pAnswerB, pAnswerC, pAnswerD, number;
Button pAdd, query;
private DatabaseReference databaseReference;
private FirebaseFirestore firebaseFirestore;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addquestion);
firebaseFirestore = FirebaseFirestore.getInstance();
pQuestion = (EditText) findViewById(R.id.question);
pAnwerA = (EditText) findViewById(R.id.answerA);
pAnswerB = (EditText) findViewById(R.id.answerB);
pAnswerC = (EditText) findViewById(R.id.answerC);
pAnswerD = (EditText) findViewById(R.id.answerD);
number = (EditText) findViewById(R.id.number);
pAdd = (Button) findViewById(R.id.addQuestion);
pAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
readQuestionStore();
}
});
query = (Button) findViewById(R.id.query);
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CollectionReference questionRef = firebaseFirestore.collection("questions");
questionRef.whereEqualTo("content.number", "20").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
questionObject pContent = queryDocumentSnapshots.toObjects(questionObject.class);
}
});
}
});
}
public void readQuestionStore(){
Map<String, Object> pContent = new HashMap<>();
pContent.put("question", pQuestion.getText().toString());
pContent.put("Corr Answer", pAnwerA.getText().toString());
pContent.put("AnswerB", pAnswerB.getText().toString());
pContent.put("AnswerC", pAnswerC.getText().toString());
pContent.put("AnswerD", pAnswerD.getText().toString());
questionObject content = new questionObject(pContent, number.getText().toString()); //document("Essen").collection("Katalog")
firebaseFirestore.collection("questions").add(content).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(questionAdder.this, "Klappt", Toast.LENGTH_LONG).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(questionAdder.this, "Klappt nicht", Toast.LENGTH_LONG).show();
}
});
}
}
这就是我的questionObject的样子:
公共类问题对象{
private Map<String, Object> content;
private String number;
public questionObject(){
}
public questionObject(Map<String, Object> pContent, String pNumber) {
this.content = pContent;
this.number = pNumber;
}
public Map<String, Object> getContent() {
return content;
}
public void setContent(Map<String, Object> content) {
this.content = content;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
问题在onClickListener的那个questionAdder类中,我收到“不兼容的类型”错误(找到:java.utils.list必需:questionObject).
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CollectionReference questionRef = firebaseFirestore.collection("questions");
questionRef.whereEqualTo("content.number", "20").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
questionObject pContent = queryDocumentSnapshots.toObjects(questionObject.class);
}
});
}
});
如果我将其更改为列表,则为空.因此,实际的问题是,如何使用数据库将CustomObject放入代码中.谢谢!
解决方法:
之所以会出现此错误,是因为QuerySnapshot是一种“包含”多个文档的类型. Firestore不会为您决定是否要返回一堆对象或仅返回一个对象.
这就是为什么您可以采用两种不同的方法的原因:
>将数据放入自定义对象的列表中:
List<questionObject> questionsList=new ArrayList<>();
if (!documentSnapshots.isEmpty()){
for (DocumentSnapshot snapshot:queryDocumentSnapshots)
questionsList.add(snapshot.toObject(questionObject.class));
}
>如果您确定只会得到一个查询的对象,则可以从返回的queryDocumentSnapshots中获取第一个对象:
questionObject object=queryDocumentSnapshots.getDocuments().get(0).toObject(questionObject.class);
您还应该注意以下几点:
为什么要写content.number而不是数字?
在您的问题文档中,数字似乎是一个单独的字段,因此您的代码应如下所示:
CollectionReference questionRef = firebaseFirestore.collection("questions");
questionRef.whereEqualTo("number", "20").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
questionObject pContent = queryDocumentSnapshots.toObjects(questionObject.class);
}
});
另外,请尝试将您的数字字段更改为int,因为它不是字符串,而是一个数字.
顺便说一句,在类的名称开头加一个大写字母比较容易接受,例如:QuestionObject question = new QuestionObject();
内容总结
以上是互联网集市为您收集整理的Java / Android / FireStore QuerySnapshot转换为CustomObject全部内容,希望文章能够帮你解决Java / Android / FireStore QuerySnapshot转换为CustomObject所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。