【问题标题】:Can't retrieve data from Firebase using ValueEventListener无法使用 ValueEventListener 从 Firebase 检索数据
【发布时间】:2019-06-05 00:53:39
【问题描述】:

我正在尝试从数据库中检索数据并将其显示在活动中。数据是从数据库中检索到的,其父级对应于先前单击的 RecyclerView 的位置。使用ValueEventListener检索数据时,显示变量为空。

我正在使用意图将 RecyclerView 的位置发送到其他活动,以便它能够从单击的 RecyclerView 的子项中检索数据。

public void changeData(){
    final Intent intent = getIntent();
    Log.v("Locationsdsa", intent.getStringExtra("EXTRA_LOCATION"));
    Log.v("LocationsdsaLOLOL", intent.getStringExtra("EXTRA_POSITION"));
    DatabaseReference db = FirebaseDatabase.getInstance().getReference("Data");
    db.child(intent.getStringExtra("EXTRA_LOCATION")).child(intent.getStringExtra("EXTRA_POSITION")).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            placeName = dataSnapshot.child("nameResto").getValue(String.class);
            String restoAddress = dataSnapshot.child("restoAddress").getValue(String.class);
            String restoReview = dataSnapshot.child("restoReviews").getValue(String.class);
            String imgUrl = dataSnapshot.child("restoThumbnail").getValue(String.class);
            langitude = dataSnapshot.child("restoLangitude").getValue(Double.class);
            longitude = dataSnapshot.child("restoLongitude").getValue(Double.class);

            Log.v("langitude", String.valueOf(langitude));
            Log.v("longitude", String.valueOf(longitude));
            Log.v("name", placeName);
            Log.v("restoaddress", restoAddress);
            Log.v("reviewresto", restoReview);
            tvPlace.setText(placeName);
            tvAddress.setText(restoAddress);
            tvRating.setText(restoReview);
            Picasso.get().load(imgUrl).resize(200, 200).centerInside().into(ivPlace);


        }

我希望可以使用 ValueEventListener 检索数据

【问题讨论】:

  • 如果你尝试硬编码孩子的名字,它会起作用吗?
  • 你的 Firebase 规则怎么样,你能展示一下吗?
  • @AlexMamo 感谢您的回答,我刚刚尝试过,但没有成功。
  • @Erik 这是我的 Firebase 规则 { "rules": { ".read": true, ".write": true } }
  • @indira 那是intent.getStringExtra("EXTRA_LOCATION")intent.getStringExtra("EXTRA_POSITION")的实际值?

标签: java android firebase firebase-realtime-database


【解决方案1】:

以下是用户经常错过的一些事情:

  • Firebase 规则缺失,默认为阻止

  • 忘记下载 google-services.json

  • 键名与代码拼写错误

  • marshal Java pojo 有错误的方法声明或缺少 set 方法

另一件经常被忽视的事情是,如果离线功能是这样的:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

在调试应用时,人们可能会忘记,在 Firebase 中更改的数据需要先传播到设备,然后设备才能对更改做出反应。这似乎正在发生,但如果互联网不稳定或其他实习生打嗝奇怪的事情可能会发生,你不会马上意识到

喜欢@AlexMamo 的这个Firebase offline capabilities causing memory problems 回答和讨论节目..

如果您感到陌生,您可以随时卸载应用程序以释放应用程序数据库的本地持久版本..

在开发时可能会在 Firestore 控制台中错误地查看错误的数据库,假设您的应用程序有一个开发者版本和一个生产版本,喝咖啡时可能会看到错误的东西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多