【问题标题】:Cannot retrieve filename and fileurl from realtime database无法从实时数据库中检索文件名和文件 URL
【发布时间】:2022-10-15 05:53:34
【问题描述】:

我正在使用这样的 Firebase 模型类。我正在尝试在用户 Uid 下检索文件名和文件 URL。如果有人需要更多信息,请问我。

public class model {
    public String filename;
    public String fileurl;

    public model() {
    }

    public model(String filename, String fileurl) {
        this.filename = filename;
        this.fileurl = fileurl;

    }

    public String getFilename() {
        return filename;
    }
    public String getFileurl() {
        return fileurl;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

    public void setFileurl(String fileurl) {
        this.fileurl = fileurl;
    }

我在我的代码中使用 FirebaseUI recyclerview。我想在用户 UID 下检索数据,请纠正我的错误。我为此做了一个适配器。

FirebaseRecyclerOptions<model> options =
            new FirebaseRecyclerOptions.Builder<model>()
                    .setQuery(FirebaseDatabase.getInstance().getReference().child("Users"),model.class)
                    .build();
    adapter=new myadapter(options);
    recview.setAdapter(adapter);

这是我的实时数据库结构。稍后我会将 fileurl 放入我的 firebase 数据库中。

这是 manifest.xml 文件。 manifest.xml 文件中有任何问题。

 <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" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:usesCleartextTraffic="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MySchool"
        tools:targetApi="31">
        <activity
            android:name=".ebooks"
            android:exported="false">
            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
        <activity
            android:name=".viewpdf"
            android:exported="false">
            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
        <activity
            android:name=".ProfileView"
            android:exported="false" />
        <activity
            android:name=".OTPActivity"
            android:windowSoftInputMode="adjustResize"
            android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"/>
        <activity
            android:name=".PhoneAuthentication"
            android:windowSoftInputMode="adjustResize"
            android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"/>
        <activity
            android:name=".SplashScreen"
            android:exported="true"
            android:windowSoftInputMode="adjustResize"
            android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
    </application>

【问题讨论】:

  • “我稍后会将 fileurl 放入我的 firebase 数据库”是什么意思?如果你不给它那些字段,它就不会得到那些字段。就这么简单。您需要添加它们才能在您的应用中获取值

标签: java android firebase google-cloud-platform firebase-realtime-database


【解决方案1】:

将这两个参数传递给 setQuery() 方法时:

.setQuery(FirebaseDatabase.getInstance().getReference().child("Users"),model.class)

这意味着适配器期望在屏幕上呈现model 类对象。如果您仔细查看您的数据库架构,在“用户”节点下,您可以看到一个 UID (NseK...wbv2),在它的正下方,有两个推送的 ID。因此,当从数据库读取数据时,Firebase-UI 库会尝试将上述引用下的每个子对象映射到 model 类型的对象中,这实际上是不可能的,因为直接子对象是字符串而不是 model 对象。要解决此问题,您必须添加对.child(uid) 的调用。所以在代码中,它应该是这样的:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = db.child("Users").child(uid);
//...
.setQuery(uidRef, model.class)

【讨论】:

  • 非常感谢亚历克斯马莫。你教我很好。
猜你喜欢
  • 2018-12-05
  • 2011-05-09
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
相关资源
最近更新 更多