- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在编写一个测试 QuizApp。游戏玩法非常简单,我只需要一个在线问题数据库,用户可以回答这些问题。
这是数据库的样子:
该集合问题包含一个唯一 ID 和一个名为“内容”的自定义对象 (questionObject)。这个数字只是我可以查询/搜索的容易的东西。
这是我的 questionAdder 和查询 UI。这只是一个小测试应用程序。
公共(public)类 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();
}
});
}
这就是我的问题对象的样子:
公开课问题对象{
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
而不是number
?看起来 number
是您的问题 document
中的一个单独字段,因此您的代码应如下所示:
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);
}
});
此外,尝试将您的number
字段更改为int
,因为它不是String
,而只是一个数字。
顺便说一句,类名以大写字母开头比较容易接受,例如:QuestionObject question=new QuestionObject();
关于java - Android/FireStore QuerySnapshot 转换为 CustomObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49599555/
调用自定义对象时出现以下错误 “‘customObject’类型的对象无法转换为‘customObject’类型。” 以下是我遇到此错误时的情况: 我动态调用 dll 中的方法。 加载程序集 创建实例
我这周开始使用 ObjectMapper,我正在尝试将 JSON 映射到 2 个 CustomClasses,但我不知道 ObjectMapper 是否具有某些功能来执行我想要的操作。第一个 Cust
我创建了一个名为“Item”的对象,并且我想序列化其中包含 Items 的 ArrayList。我的程序与 ArrayList 完美配合,但它不适用于 ArrayList 。我相信这与我的对象有关。这
我的 ArrayList 变量有问题,该变量包含 Videos 的对象我创建的类。 ArrayList我创建的似乎总是空的,即使我 add给它一个对象。这是我声明并使用此 ArrayList 的代码:
我想对自定义类的条目执行文本搜索。该文本搜索不仅应匹配输入的字符串,还应检查拼写错误的单词。所以我正在寻找一个可以为我做这件事的图书馆。 更多背景信息:假设我从 SQLServer2008 数据库生成
我正在尝试更新多条记录权限。当我只更新一条记录的权限时,一切正常,但当更新多条记录时,没有任何反应。 List qbCustomObjectList = new LinkedList(); QBPer
我有这两个对象: public class BaseModule { public long BaseModuleID { get; set; } public string Modu
我在尝试对自定义对象的 ArrayList 进行排序时遇到问题。事实上,在排序之后,我的 ArrayList 中没有任何变化。我的方法有问题吗? 这是我的艺术家自定义对象属性: public clas
这个问题在这里已经有了答案: Getting an NSArray of a single attribute from an NSArray (3 个答案) 关闭 9 年前。
我得到了一个包含图片信息的类,比如文件路径、哈希值、字节。在另一个类中,我得到了一个通用列表,我在其中放置了包含图片信息的类中的对象。 那个类看起来像这样: [Serializable()]
我正在尝试保留一个假设为 xyz 的类的对象列表。当我在 NodeEntity 类中执行此操作时: @Property List listOfConditions 当通过 Neo4jOperation
我有一个如下的插件 class AbstractConfigExtension { public static final String NAME = "abstract_extension"
这是一个简单的问题,比任何事情都更具理论性。 Powershell 中的自定义对象和 PSObject 之间的真正区别是什么?您为什么以及何时创建它们? 谢谢! 最佳答案 PSCustomObject
我正在通过应用程序上下文将数据从 iOS 应用程序传输到其 Watch 扩展。我想发送我创建的自定义对象(名为WeatherReport)。 let context = ["report" : Wea
我在 Quickblox 控制台中创建了一个自定义对象,我可以检索这些对象,但现在需要访问原始 JSON 对象。 我可以通过字段手动迭代重建对象,并希望我可以直接引用和原始 JSON,从而节省大型数据
我有以下代码: ActiveModule resultObject = null; StringBuilder sqlStringBuilder = new Strin
有没有一种简单快速的方法来对 Java 中的 ArrayList 中的元素进行分组?我在问是否已经有办法不用我自己实现了?类似 Collections.sort(monuments,new objec
我创建了一个通用函数来检索JSON并对其进行解析: public IList RetrieveView(string result) { JavaScriptSeria
首先,如果我错了,请指正。我想从 ArrayList 中找到项目的索引(即字符串值)不使用 For 循环。 POJO: id; name; 代码: ArrayList list = new Array
嗨我正在尝试序列化 FileStream fileStream = new FileStream("batches.xml", FileMode.Open); XmlSerializer serial
我是一名优秀的程序员,十分优秀!