在Android Studio中使用Firebase从特定位置检索数据。

12 浏览
0 Comments

在Android Studio中使用Firebase从特定位置检索数据。

大家好 🙂 我刚刚开始学习编程,刚刚弄清楚如何在Android Studio中使用RecyclerView。\n现在我想从Firebase的位置x检索数据:\n例如,我的数据库包括:\n用户:\nMax(具有字段:大学,年龄,城市)\nLena(具有字段:大学,年龄,城市)\n我不知道有多少用户,他们的名字是什么,我想获取一个位置x上一个用户的所有数据。\n有人有办法解决这个问题吗?\n提前感谢!\n编辑:\n我现在保存了用户的UID,并将其传递给其他活动。然后,我尝试从Firebase接收相关数据,但我仍然无法在TextView中显示“大学”字段的数据。\n

public class nextActivity extends AppCompatActivity{
String UID;
private DocumentReference myReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.next_activity);
//从意图中获取数据(我检查了UID的值- getIntent起作用。)
UID = getIntent().getStringExtra("uid");
// 我不确定下面的代码行。可以只添加“UID”吗?
myReference = FirebaseFirestore.getInstance().document("Users/"+UID);
myReference.addSnapshotListener(new EventListener() {
    @Override
    public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
        if (documentSnapshot.exists()) {
            long universityID = documentSnapshot.getLong("university");
            cUniversityText.setText("大学"+Long.toString(universityID));
        } else if (e != null) {
            Log.w("InspiringQuote", "Exception!", e);
        }
    }
});
cUniversityText = findViewById(R.id.cuniversitytext);

\n}

0
0 Comments

问题的原因是用户想要从Firebase中的特定位置获取数据,并将获取到的数据设置为文本。然而,在代码中存在一个问题,即当获取的数据为空时,会导致文本显示为null。

解决方法是在获取数据之前,先判断数据是否为空。如果数据不为空,则将其设置为文本。下面是修改后的代码:

reference.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
        DataSnapshot users = dataSnapshot.child("users");
        int count=0;
        for (DataSnapshot usrchild : users.getChildren()){
           count++;
           if(count == 'Position x variable'){
              DataSnapshot university = usrchild.child("University");
              DataSnapshot age = usrchild.child("Age");
              DataSnapshot City = usrchild.child("City");
              String universityValue = String.valueOf(university.getValue());
              if(!universityValue.matches("") && universityValue != null){
              //Value is not null
              //Set universityValue as text
              }
           }
        }
    }
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
    }
});

通过添加判断条件,即判断获取到的数据是否为空,并且不为null,可以避免设置文本时显示为null的问题。这样,即使数据为空,也不会导致文本显示错误。

0