以下方法我可以更新我从HashMap创建的文档中的字段:
public void saveNote(View v) {
String title = editTextTitle.getText().toString();
String description = editTextDescription.getText().toString();
Map<String, Object> note = new HashMap<>();
note.put(KEY_TITLE, title);
note.put(KEY_DESCRIPTION, description);
noteRef.set(note)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(MainActivity.this, "Note saved", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Error!", Toast.LENGTH_SHORT).show();
Log.d(TAG, e.toString());
}
});
}
public void updateDescription(View v) {
String description = editTextDescription.getText().toString();
noteRef.update(KEY_DESCRIPTION, description);
}
如何从POJO保存文档并使用toObject
将其转换回来时更新字段?有什么例子吗?
答案 0 :(得分:0)
为了理解它,用一个简单的pojo类来解释。
这是示例pojo类
public class User {
String name;
String mobile;
String email;
String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
**Creating/adding new Document**
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firebaseFirestore=FirebaseFirestore.getInstance();
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
User user=new User();
user.setName("ABCD");
user.setAddress("Some Address");
user.setEmail("some email");
user.setMobile("mobilenumber");
CollectionReference collectionReference=firebaseFirestore.collection("User");
collectionReference.document("UserOne").set(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful())
{
Toast.makeText(this, "Document created/updated", Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
我有一个带有单个按钮的活动,其代码如下
CollectionReference
现在观看内部点击监听器的代码。这里创建一个User对象,并使用setter为其字段添加值。
之后使用名为User
的集合初始化collectionReference.document("UserOne").set(user).addOnCompleteListener()
并将文档添加到该集合中
UserOne
此处文档为user in set()
,对象为UserOne
方法。因此,这将在User
集合中添加/创建名为set()
的文档。
现在如何更新现有文档的字段?
方法1
此方法将使用您在documentId
方法中传递的对象值更新整个文档。您必须知道要更新的文档的mobile
。
您可以通过创建这样的新对象来简单地更改字段的值。这里正在更改 User user=new User();
user.setName("ABCD");
user.setAddress("Some Address");
user.setEmail("some email");
user.setMobile("0123456789");
CollectionReference collectionReference=firebaseFirestore.collection("User");
collectionReference.document("UserOne").set(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful())
{
Toast.makeText(this, "Document created/updated", Toast.LENGTH_SHORT).show();
}
}
});
}
});
字段的值。
mobile
方法2
在此方法中,您可以像这样更新pojo类的特定字段。我正在使用值55555
更新 CollectionReference collectionReference=firebaseFirestore.collection("User");
collectionReference.document("UserOne").update("mobile", "55555").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(this, "Document created/updated", Toast.LENGTH_SHORT).show();
}
}
});
字段;
documentId
注意:在这里,您必须知道文档的(define (counter n loN)
(define (acc loN c)
(cond [(null? loN) '()]
[(> c 0) (acc (cdr loN) (sub1 c))]
[else loN]))
;in
(let ((c (- (length loN) n)))
(cond ; [(>= 0 n) #f]
[(positive? c) (acc loN c)]
[else #f])))
(check-equal? (counter 3 '(a b c d e)) '(c d e))
(check-equal? (counter 6 '(a b c d e)) #f)
(check-equal? (counter -3 '(a b c d e)) '())
(check-equal? (counter 0 '(a b c d e)) '())
才能更新其中一个字段
使用这两种方法,您必须能够更新文档中使用的pojo类的字段。希望这会对你有所帮助。