无法从Firebase实时数据库获取用户UID下的filename与fileurl,求修正
问题解决方案
一、修正FirebaseRecycler查询,获取当前用户UID下的数据
你当前的查询直接指向Users节点,会加载所有用户的数据。要获取当前登录用户UID下的filename和fileurl,需要先定位到该用户的专属节点,修改后的代码如下:
// 获取当前登录用户的UID(需确保用户已完成登录) String currentUserId = FirebaseAuth.getInstance().getCurrentUser().getUid(); // 构建指向当前用户节点的查询 FirebaseRecyclerOptions<model> options = new FirebaseRecyclerOptions.Builder<model>() .setQuery(FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserId), model.class) .build(); adapter = new myadapter(options); recview.setAdapter(adapter);
注意事项:
- 必须先判断用户登录状态,避免
getCurrentUser()返回空指针 - 数据库中用户节点下的字段名(如
filename、后续添加的fileurl)要和model类的字段名完全匹配(大小写一致)
二、Manifest文件检查
你的Manifest存在以下几个需要修正的点:
权限适配问题:
- Android 13及以上版本中,
READ_EXTERNAL_STORAGE已被废弃,如需读取媒体文件,需使用细分权限如READ_MEDIA_IMAGES;如果是读取PDF等文档,Android 13+无需额外权限,直接通过存储访问框架即可 - 低版本兼容需保留
READ_EXTERNAL_STORAGE并添加版本限制
- Android 13及以上版本中,
Activity的exported属性缺失:
.OTPActivity、.PhoneAuthentication未设置android:exported属性,在Android 12及以上系统会导致安装失败,需补充设置为android:exported="false"(这两个页面不是对外入口)
冗余的intent-filter:
.MainActivity中的<action android:name="android.intent.action.MAIN" />配置无意义(没有搭配LAUNCHER category),建议移除
修正后的Manifest关键片段:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Android 13+ 媒体读取权限,按需添加 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:minSdkVersion="33" /> <!-- 低版本兼容读取权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <application ...> <!-- 补充exported属性 --> <activity android:name=".OTPActivity" android:exported="false" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"/> <activity android:name=".PhoneAuthentication" android:exported="false" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"/> <!-- 移除冗余intent-filter --> <activity android:name=".MainActivity" android:exported="true"> </activity> ... </application>
三、Model类确认
你的model类完全符合Firebase实时数据库的序列化要求:
- 包含无参构造函数
- 字段名与数据库字段匹配
- 提供了对应的getter/setter方法
后续数据库添加fileurl字段后,无需修改Model类,直接使用即可
内容的提问来源于stack exchange,提问作者Unique Idea
相关产品推荐
相关产品推荐

