You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecyclerView布局不显示:应用时隔一月点击按钮跳转空白页面

问题排查与解决思路

嘿,这种隔了段时间代码突然罢工的情况真的让人头疼!我仔细看了你的代码和描述,几个关键点应该能解决你的RecyclerView空白、跳转无内容的问题:

1. 模型类的低级错误(最可能的直接原因)

你的RestaurantDetails里的setLatitude方法写崩了!看这段:

public void setLatitude(Double lang) {this.latitude = latitude;}

参数是lang,但你赋值的时候用了latitude = latitude——等于啥都没改!Firebase在序列化对象时,这个字段会被设为null,甚至可能导致整个对象映射失败,直接让RecyclerView拿不到数据。

赶紧改成正确的:

public void setLatitude(Double latitude) {this.latitude = latitude;}

2. Firebase数据库规则变更(高频坑)

隔了一个月没碰,很大概率你之前用的是测试用的开放规则,现在Firebase自动把规则切换成了仅认证用户可访问,导致你的App拉不到数据,RecyclerView自然是空的。

去Firebase控制台的「实时数据库」→「规则」页面检查:

  • 如果是下面这种私有规则,未登录用户根本拿不到数据:
    {
      "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
      }
    }
    
  • 临时测试可以改成开放规则(上线前一定要改回安全规则!):
    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }
    

如果改完后RecyclerView显示内容了,那就是规则的锅,后续记得配置正确的身份验证和权限规则。

3. Adapter里的冗余代码(虽不直接报错,但留着隐患)

你的RestaurantAdapter里重复定义了FirebaseRecyclerOptions options成员变量,但构造函数已经接收了外部传入的options,这个内部的options完全没用,还容易混淆逻辑,建议删掉这段:

// 删掉这段冗余代码
FirebaseRecyclerOptions<RestaurantDetails> options = new FirebaseRecyclerOptions.Builder<RestaurantDetails>()
        .setQuery(FirebaseDatabase.getInstance().getReference().child("Restaurant").child("Info"), RestaurantDetails.class)
        .build();

4. 跳转页面空白的排查方向

点击跳转后是空白页,大概率是RestaurantInfoActivity没正确处理传过来的post_key:

  • 先确认这个Activity在AndroidManifest.xml里注册了;
  • 检查接收参数的逻辑,加个日志看看有没有拿到值:
    String postKey = getIntent().getStringExtra("post_key");
    if (postKey == null) {
        Log.d("RestaurantInfo", "post_key 没传过来!");
        return;
    }
    
  • 再确认加载数据的Firebase查询路径和ResRecyclerViewActivity里的一致。

5. 加日志排查数据是否真的拉到了

虽然调试没报错,但可以手动加日志确认数据状态,在ResRecyclerViewActivity的onCreate里加这段:

FirebaseDatabase.getInstance().getReference().child("Restaurant").child("Info")
        .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Log.d(TAG, "拉到的数据总数: " + snapshot.getChildrenCount());
                for (DataSnapshot ds : snapshot.getChildren()) {
                    RestaurantDetails details = ds.getValue(RestaurantDetails.class);
                    Log.d(TAG, "餐厅名称: " + details.getName());
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Log.e(TAG, "数据拉取失败原因: " + error.getMessage());
            }
        });

这样就能明确是数据没拉到,还是拉到了但RecyclerView没渲染。


内容的提问来源于stack exchange,提问作者I.Z.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:52:51