Android:在EditText中检索并显示Firebase数据,对其进行编辑并保存内容

时间:2017-09-24 21:19:16

标签: android firebase firebase-realtime-database

如何从firebase编辑特定日期?我想要的是,在列表视图中,他们是一个事件列表,然后用户想要通过在特定事件中执行长按来编辑它。如果用户已经执行了长按,则他们将有两个选项,用于删除或编辑事件。我已经做了删除方法,但我的问题是更新方法。一旦用户点击选项中的更新,它将转到另一个活动,并且用户选择编辑的事件的所有数据将显示在编辑文本上,并且用户可以已经编辑该事件。我该怎么做?

我希望你能帮助我。谢谢!

这是我的代码:

databaseReference = FirebaseDatabase.getInstance().getReference("events_users").child(userUid);
    listViewEvents = (ListView) findViewById(R.id.listViewEvents);
    eventInfos = new ArrayList<>();

    // listViewEvents.setLongClickable(true);

    listViewEvents.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {

            EventInfo eventInfo = eventInfos.get(i);
            showUpdateDeleteDialog(eventInfo.getEventId(), eventInfo.getEventTitle());
            return true;
        }
    });

 private void showUpdateDeleteDialog(final String eventId, String eventTitle){
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    LayoutInflater inflater = getLayoutInflater();
    final View dialogView = inflater.inflate(R.layout.update_delete_dialog, null);
    dialogBuilder.setView(dialogView);

    final Button buttonUpdate = (Button) dialogView.findViewById(R.id.buttonUpdateEvent);
    final Button buttonDelete = (Button) dialogView.findViewById(R.id.buttonDeleteEvent);

    dialogBuilder.setTitle(eventTitle);
    final AlertDialog b = dialogBuilder.create();
    b.show();

    buttonDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            deleteEvent(eventId);
            b.dismiss();
        }
    });

    buttonUpdate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EventInfo eventInfo = new EventInfo();
            Intent intent = new Intent(_8_ViewEventMember.this, EventUpdate.class);

            startActivity(intent);
        }

    });

}

private boolean deleteEvent (String id) {
    //getting the specified artist reference
    auth = FirebaseAuth.getInstance();
    String userUid1 = auth.getCurrentUser().getUid();
    DatabaseReference dR = FirebaseDatabase.getInstance().getReference("events_users").child(userUid1).child(id);
    DatabaseReference dR1 = FirebaseDatabase.getInstance().getReference("events").child(id);

    //removing artist
    dR.removeValue();
    dR1.removeValue();

    Toast.makeText(getApplicationContext(), "Event Deleted", Toast.LENGTH_LONG).show();

    return true;
}

private boolean updateEvent(String id, String title, String dateStart, String dateEnd, String timeStart, String timeEnd,
                            String location,
                            String description){
    auth = FirebaseAuth.getInstance();
    String userUid1 = auth.getCurrentUser().getUid();
    DatabaseReference dR = FirebaseDatabase.getInstance().getReference("events_users").child(userUid1).child(id);
    DatabaseReference dR1 = FirebaseDatabase.getInstance().getReference("events").child(id);

    EventInfo eventInfo = new EventInfo(id, title, dateStart, dateEnd, timeStart, timeEnd, location, description);
    dR.setValue(eventInfo);
    dR1.setValue(eventInfo);

    Toast.makeText(getApplicationContext(), "Event Updated", Toast.LENGTH_LONG).show();
    return true;
}

protected void onStart() {
    super.onStart();

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            eventInfos.clear();

            for (DataSnapshot postSnapshot:  dataSnapshot.getChildren()){
                EventInfo eventInfo = postSnapshot.getValue(EventInfo.class);

                eventInfos.add(eventInfo);
            }

            EventInfo_Adapter eventInfoAdapter = new EventInfo_Adapter(_8_ViewEventMember.this, eventInfos);
            listViewEvents.setAdapter(eventInfoAdapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

1 个答案:

答案 0 :(得分:2)

在事件对象中,您仍然可以输入要更新日期的子路径并设置值。

DatabaseReference dR = FirebaseDatabase.getInstance().getReference("events_users").child(userUid1).child(id);
DatabaseReference dR1 = FirebaseDatabase.getInstance().getReference("events").child(id);
DatabaseReference dateReference = dR.child("date_path");
DatabaseReference dateReference1 = dR1.child("date_path");
dateReference.setValue("new_date");
dateReference1.setValue("new_date");