gpt4 book ai didi

java - 您如何使用 Data Snapshot 跨多个子节点检索数据?

转载 作者:行者123 更新时间:2023-11-30 00:04:28 25 4
gpt4 key购买 nike

我想检索在每个 userID 节点中找到的 eventName 和 eventSport 值。

我对 Android Studio 还是个新手。

我的 firebase 数据库按以下方式组织:

fir-login-31***
event
userID(retrieved from firebase authentication)
Unique EventID(randomly generated by me)
eventID: "Unique EventID
eventName: "Test1
eventSport: "TestSport12

因为每次不同的用户将数据上传到数据库时,数据都会存储在来自 Firebase 身份验证的他们的 Firebase UserID 节点中。有没有办法让我仍然从每个用户生成的节点检索数据,同时仍然让用户通过他们自己的用户 ID 存储他们的数据?我使用他们的用户 ID 在 FirabaseDatabase 中设置读写规则。

Host_Activity.java:

package com.example.songkwongwee.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.List;

public class HostActivity extends AppCompatActivity {

EditText editTextName;
Button buttonAdd;
Spinner spinnerSports;

DatabaseReference databaseEvent;
FirebaseAuth mAuth;

ListView listViewEvents;

List<Event> eventList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_host);

databaseEvent = FirebaseDatabase.getInstance().getReference("event");

mAuth = FirebaseAuth.getInstance();

editTextName = findViewById(R.id.editTextName);
buttonAdd = findViewById(R.id.buttonHostGame);
spinnerSports = findViewById(R.id.spinnerSports);

listViewEvents = findViewById(R.id.listViewEvents);

eventList = new ArrayList<>();

buttonAdd.setOnClickListener(new View.OnClickListener() { //click button method for adding event
@Override
public void onClick(View v) {
addEvent();
}
});

}

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

databaseEvent.addValueEventListener(new ValueEventListener() { //executed every time we change anything in database
@Override
public void onDataChange(DataSnapshot dataSnapshot) { //contains all data in snapshot data object

eventList.clear(); //clear artist list

for(DataSnapshot eventSnapshot: dataSnapshot.getChildren()){
Event event = eventSnapshot.getValue(Event.class);

eventList.add(event); //every time new data entered, this method executes,fetch all artist from database
}

EventList adapter = new EventList(HostActivity.this, eventList);
listViewEvents.setAdapter(adapter);

}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}


private void addEvent(){ //method for user to create event
String name = editTextName.getText().toString().trim();
String sport = spinnerSports.getSelectedItem().toString();

if(!TextUtils.isEmpty(name)){ //if name is not empty

String uid = mAuth.getUid(); //call uid method to get user id

String id = databaseEvent.push().getKey(); //call id method to get random string key

Event event = new Event(id, name, sport); //call event method to

databaseEvent.child(uid).child(id).setValue(event); //method to store node in organise form (Event>UserID>Event.UKey>Details)

Toast.makeText(this,"Event added",Toast.LENGTH_LONG).show(); //Show UI
}
else{ //if name is empty
Toast.makeText(this,"You should enter a name", Toast.LENGTH_LONG).show(); //Show error UI
}

}
}

事件.java:

public class Event {

String eventId;
String eventName;
String eventSport;

public Event(String eventId, String eventName, String eventSport){
this.eventId = eventId;
this.eventName = eventName;
this.eventSport = eventSport;

}

public String getEventId() {
return eventId;
}

public String getEventName() {
return eventName;
}

public String getEventSport() {
return eventSport;
}

最佳答案

要检索 eventname 和 eventsport,请尝试以下操作:

FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("event").child(user.getUid());;

reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String eventname=datas.child("eventName").getValue().toString();
String eventsport=datas.child("eventSport").getValue().toString();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});

你有这个数据库:

event
userID(retrieved from firebase authentication)
Unique EventID(randomly generated by me)
eventID: "Unique EventID
eventName: "Test1
eventSport: "TestSport12

每个用户 ID 对于该用户来说都是唯一的,并且由于您希望用户检索他的数据,因此您可以使用 user.getUid() 它将检索用户 ID,然后在其中迭代以获取事件名称和事件运动。

关于java - 您如何使用 Data Snapshot 跨多个子节点检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49252600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com