【发布时间】:2019-01-23 22:24:54
【问题描述】:
我正在使用 Firebase 在 Android Studio 上开发一个任务管理应用程序。我创建了一个类来向数据库添加数据,但我尝试了多种方法来集成和读取应用程序上的数据,但没有任何进展。
主Activity.java
database = FirebaseDatabase.getInstance();
ref = database.getReference().child("Task List");
final ArrayList<String> mTaskName = new ArrayList<>();
taskListView = (ListView) findViewById(R.id.taskListView);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.task_info, mTaskName);
taskListView.setAdapter(arrayAdapter);
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
String value = dataSnapshot.getValue(String.class);
mTaskName.add(value);
arrayAdapter.notifyDataSetChanged();
}
add_task.java
mDatabase = FirebaseDatabase.getInstance().getReference().child("Task List"); // Reference database
addTaskbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String taskName = newTask.getText().toString().trim();
String date = dateField.getText().toString().trim();
String assignee = spinnerAssign.getSelectedItem().toString();
String descrip = description.getText().toString();
if (!TextUtils.isEmpty(taskName) && !TextUtils.isEmpty(date)) {
HashMap<String, String> taskData = new HashMap<>();
taskData.put("Name", taskName);
taskData.put("Date", date);
taskData.put("Assigned to", assignee);
taskData.put("Description", descrip);
mDatabase.push().setValue(taskData).addOnCompleteListener(new OnCompleteListener<Void>() {
数据库的结构如下:
经理任务列表
-任务列表
-PushID
-分配给:“姓名”
-日期:“日期”
-描述:“描述”
-名称:“任务名称”
【问题讨论】:
-
“OnCompleteListener”回调是否调用成功?要实际显示数据,请尝试实现“addSingleValueEventListener”而不是“ChildEventListener”。
-
嗨,Marco,这是你的意思吗? 'ref.addValueEventListener(new ValueEventListener() { 覆盖 public void onDataChange(NonNull DataSnapshot dataSnapshot) { for (DataSnapshot ds: dataSnapshot.getChildren()) { task = ds.getValue(Task.class); list.add(task.getName ()); }//for taskListView.setAdapter(adapter); } Override public void onCancelled(NonNull DatabaseError databaseError) { } });'
-
如果您只需要显示列表,请使用仅触发一次的“addListenerForSingleValueEvent”(检索列表),如下所述:firebase.com/docs/android/guide/…。不要忘记调用 'notifyDataSetChanged()' 来更新本地列表。
-
我已经实现了,但似乎并没有真正改变。我在列表视图中没有收到任何数据。此外,如果我尝试访问我的 add_task 页面,我的应用程序会崩溃。
-
另外,为了让事情更清楚,我希望能够通过应用程序添加或不添加新数据来查看数据。
标签: java android firebase firebase-realtime-database