【发布时间】:2019-11-25 14:31:20
【问题描述】:
我已经设置了一个 RecyclerViewAdapter,我可以完美地添加帖子,但是在 firebase 中我只定义了一个集合而不是文档,所以 firebase 生成一个随机字符串,我可以获得字符串详细信息,但我不知道如何与 recyclerview 协调,这样当我滑动删除它时,它会获取相关的字符串并将其从 firebase 中删除,目前它只需要创建最新的字符串并将其删除。
firebase database string My app showing the same reference 如您所见,我可以获取字符串值,甚至使用 getter 和 setter 将其存储为字段,但我不知道如何引用它以删除正确的文档。
我的对象在一个活动(活动 1)中创建并在另一个活动(活动 2)中显示。
活动一:
filepath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String imageUrl = uri.toString(); //creates a URL that links to the images
final Journal journal = new Journal();
journal.setTitle(title);
journal.setDescription(description);
journal.setImageUrl(imageUrl);
journal.setTimeAdded(new Timestamp(new Date()));
journal.setUsername(currentUserName);
journal.setUserId(currentUserId);
journal.setDocRef(documentId);
JournalApi.getInstance().setDocRef(journal.getDocRef());
collectionReference.document(documentId).set(journal).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
postJournalProgressBar.setVisibility(View.INVISIBLE);
Intent intent = new Intent(PostJournalActivity.this, JournalListActivity.class);
startActivity(intent);
finish();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(PostJournalActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onFailure: when saving the journal" + e.getMessage());
}
});
//save a journal instance
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
});
}}
活动二:
@Override
protected void onStart() {
super.onStart();
collectionReference.whereEqualTo("userId", JournalApi
.getInstance()
.getUserId())
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
if (!queryDocumentSnapshots.isEmpty()) {
for (QueryDocumentSnapshot journals : queryDocumentSnapshots) {
/**/
journal = journals.toObject(Journal.class);
journalList.add(journal);
docList.add(journal.getDocRef());
}
journalRecyclerViewAdapter = new RecyclerViewAdapter(JournalListActivity.this, journalList);
recyclerView.setAdapter(journalRecyclerViewAdapter);
journalRecyclerViewAdapter.notifyDataSetChanged();
} else {
noJournalEntry.setVisibility(View.VISIBLE);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
//Swipe To Delete
ItemTouchHelper.SimpleCallback swipeToDelete = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
//removes the data from the recyclerview and adds corrects the screen accordingly
journalList.remove(viewHolder.getAdapterPosition());
journalRecyclerViewAdapter.notifyDataSetChanged();
journalRecyclerViewAdapter.deleteItem(viewHolder.getAdapterPosition());
deleteItem();
}
};
private void deleteItem() {
collectionReference.document(testDocumentId).set(journal);
db.collection("Journal")
.document(testDocumentId)
.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(JournalListActivity.this, "Deleted?", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(JournalListActivity.this, "NOPE", Toast.LENGTH_SHORT).show();
}
});
我可以引用 recyclerview 适配器,以便从手机中删除视图并正确更新,但是一旦我刷新它就会回来,因为我无法从数据库中删除
【问题讨论】:
标签: android firebase android-recyclerview google-cloud-firestore