【发布时间】:2019-09-15 19:35:21
【问题描述】:
我想从 Firebase 检索数据并将其显示在 EditText 中,并允许用户在需要时对其进行更改
这是一个使用 Firebase 作为数据库的安卓笔记应用
我想从 Firebase 检索数据并将其显示在 EditText 中,并允许用户在需要时对其进行更改。
public class HomeActivity extends AppCompatActivity {
private Toolbar mToolbar;
private FloatingActionButton mFABCreate;
private FirebaseAuth mFirebaseAuth;
private RecyclerView mRecyclerView;
private DatabaseReference mDatabaseReference;
String mPost_Key;
String mKey;
String mTitle;
String mNote;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mFirebaseAuth = FirebaseAuth.getInstance();
FirebaseUser lFirebaseUser = mFirebaseAuth.getCurrentUser();
assert lFirebaseUser != null;
String uid = lFirebaseUser.getUid();
mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("AllData").child(uid);
mDatabaseReference.keepSynced(true);
mRecyclerView = findViewById(R.id.recycler);
LinearLayoutManager lLinearLayoutManager = new LinearLayoutManager(this);
lLinearLayoutManager.setStackFromEnd(true);
lLinearLayoutManager.setReverseLayout(true);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(lLinearLayoutManager);
mToolbar = findViewById(R.id.toolbar);
mToolbar.setTitle("Quick Note");
FloatingActionButton fab = findViewById(R.id.Add_Data);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
startActivity(new Intent(HomeActivity.this, AddActivity.class));
}
});
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Items, RecyclerViewAdapter> lAdapter = new FirebaseRecyclerAdapter<Items, RecyclerViewAdapter>(
Items.class,
R.layout.show_note,
RecyclerViewAdapter.class,
mDatabaseReference) {
@Override
protected void populateViewHolder(RecyclerViewAdapter recyclerViewAdapter, final Items items, final int i) {
recyclerViewAdapter.setTitle(items.getTitle());
recyclerViewAdapter.setNote(items.getNote());
recyclerViewAdapter.setDate(items.getDate());
recyclerViewAdapter.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPost_Key = getRef(i).getKey();
mTitle = items.getTitle();
mNote = items.getNote();
editData();
}
});
}
};
mRecyclerView.setAdapter(lAdapter);
}
private void editData(){
startActivity(new Intent(getApplicationContext(), EditActivity.class));
}
public static class RecyclerViewAdapter extends RecyclerView.ViewHolder{
View mView;
public RecyclerViewAdapter(@NonNull View itemView) {
super(itemView);
mView = itemView;
}
public void setTitle (String title){
TextView lTitle = mView.findViewById(R.id.showTitle);
lTitle.setText(title);
}
public void setNote (String note){
TextView lNote = mView.findViewById(R.id.showNote);
lNote.setText(note);
}
public void setDate (String date){
TextView lDate = mView.findViewById(R.id.showDate);
lDate.setText(date);
}
}
}
public class EditActivity extends AppCompatActivity {
private FirebaseAuth mAuth;
private DatabaseReference mDatabaseReference;
private FirebaseDatabase mFirebaseDatabase;
RecyclerView mRecyclerView;
String mPost_Key;
String mTitle, mNote;
String lTitleFire;
String lNoteFire;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final EditText lTitle = findViewById(R.id.YourTitleEdit);
final TextView lNote = findViewById(R.id.Your_Note_Add);
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
mDatabaseReference = mFirebaseDatabase.getReference(mAuth.getUid());
mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Items lGetValues = dataSnapshot.getValue(Items.class);
assert lGetValues != null;
lTitle.setText(lGetValues.getTitle());
lNote.setText(lGetValues.getNote());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getApplicationContext(), "Getting value failed", Toast.LENGTH_LONG).show();
}
});
}
}
public class Items {
String title;
String note;
String date;
String id;
public Items() {
}
public Items(String title, String note, String date, String id) {
this.title = title;
this.note = note;
this.date = date;
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Firebase 数据:
AllData
nakrU3ArQNShLzyn9U8X9fAFNeL2
-LopLNpUFmepM8gvCmHS
date:
id:
note:
title:
我的目标是设置从 Firebase 获得的值并将其显示到“EditActivity”中
【问题讨论】:
-
不清楚这里的问题是什么,但我的第一个观察是你无法知道在 EditActivity 中点击了哪个笔记......为此,你需要通过 Intent 传递数据
-
我正在尝试获取存储在我的 firebase 中的数据并将其显示到编辑文本中。
-
我明白这一点,您的价值事件侦听器看起来不错。您在 Firebase 中有要显示的数据吗?您显示的值是空白的,所以您的问题实际上是关于如何写入数据?您需要在某处调用 setValue firebase.google.com/docs/database/android/read-and-write
-
是的,我的 firebase 中确实有数据
-
好的,那么您是否在任何地方出现错误?就像我说的,您需要将对特定行的引用传递给编辑活动。你得到了
mPost_Key = getRef(i).getKey();,但没有用它做任何事情,那么你正在做getReference(mAuth.getUid()),这将返回用户的所有项目,而不是特定的项目
标签: android firebase firebase-realtime-database android-edittext firebase-authentication