java - 无法从 Firebase 检索数据到 ListView

标签 java android firebase firebase-realtime-database

我在从 Firebase 数据库检索数据时遇到问题。我已经实现了所有必要的依赖项,没有显示检索到的数据的错误。

我尝试了很多 YouTube 视频,实现了必要的依赖项,应用程序运行顺利,但未检索数据。

这是主要 Activity 的代码:

    public class OrdersActivity extends AppCompatActivity {
        ListView mListView;
        DatabaseReference dbRef;
        ArrayList<String> arrayList = new ArrayList<>();
        ArrayAdapter<String> arrayAdapter;
        private static final String TAG = "OrdersActivity";
    
        @Override
        protected void onCreate (Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_orders);
            Log.d(TAG, "onCreate: Started");
            mListView = (ListView) findViewById(R.id.listView);
            dbRef = FirebaseDatabase.getInstance().getReference("Orders");
            arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item);
            mListView.setAdapter(arrayAdapter);
            dbRef.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded (@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                    String value = dataSnapshot.getValue(Orders.class).toString();
                    arrayList.add(value);
                    arrayAdapter.notifyDataSetChanged();
                }
    
                @Override
                public void onChildChanged (@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
    
                }
    
                @Override
                public void onChildRemoved (@NonNull DataSnapshot dataSnapshot) {
    
                }
    
                @Override
                public void onChildMoved (@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
    
                }
    
                @Override
                public void onCancelled (@NonNull DatabaseError databaseError) {
    
                }
    
            });
        }
    }

enter image description here ] 1

这是订单类别:

    public class Orders {
        private String emri;
        private String data;
        private String statusi;
        private String imgURL;
    
        public Orders (String emri, String data, String statusi, String imgURL) {
            this.emri = emri;
            this.data = data;
            this.statusi = statusi;
            this.imgURL = imgURL;
        }
    
        public String getEmri () {
            return emri;
        }
    
        public void setEmri (String emri) {
            this.emri = emri;
        }
    
        public String getData () {
            return data;
        }
    
        public void setData (String data) {
            this.data = data;
        }
    
        public String getStatusi () {
            return statusi;
        }
    
        public void setStatusi (String statusi) {
            this.statusi = statusi;
        }
    
        public String getImgURL () {
            return imgURL;
        }
    
        public void setImgURL (String imgURL) {
            this.imgURL = imgURL;
        }
    }

BUILD.GRADLE(:APP)

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.3"
        defaultConfig {
            applicationId "com.fiek.projektiioc"
            minSdkVersion 19
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
            multiDexEnabled true
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        implementation 'com.google.firebase:firebase-auth:19.3.1'
        implementation 'com.google.android.material:material:1.0.0'
        implementation 'com.android.support:multidex:1.0.3'
        implementation 'androidx.legacy:legacy-support-v4:1.0.0'
        implementation 'com.google.android.gms:play-services-maps:17.0.0'
        implementation 'androidx.cardview:cardview:1.0.0'
        testImplementation 'junit:junit:4.12'
        implementation 'com.firebaseui:firebase-ui-firestore:4.3.1'
        implementation 'com.google.firebase:firebase-firestore:21.4.3'
        implementation 'com.google.firebase:firebase-analytics:17.4.3'
        implementation 'com.google.firebase:firebase-database:19.3.1'
        implementation 'com.google.firebase:firebase-messaging:20.2.1'
        androidTestImplementation 'androidx.test:runner:1.2.0'
        implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    }

这是 BUILD.GRADLE(项目)

    buildscript {
        repositories {
            google()
            jcenter()
            
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:4.0.0'
            classpath 'com.google.gms:google-services:4.3.3'
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
            
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }

最佳答案

第一个修复:

您正在对从 Firebase 的 ChildEventListener 回调 onChildAdded() 接收的 Orders 对象使用 toString() > 同时不重写 Orders 类的 toString() ;因此它调用父类(super class)的 toString()

String value = dataSnapshot.getValue(Orders.class).toString();

因此,您需要重写 OrderstoString() 方法,以返回需要显示在 ListView 行上的内容项目。

第二个修复:

您没有将arrayList附加到arrayAdapter,因此您需要替换

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item);

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item, arrayList);

关于java - 无法从 Firebase 检索数据到 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62486441/

相关文章:

firebase - 将 PWA 安装到主屏幕后,我的通知徽章图标未显示

Firebase 云函数模拟器在 30000 毫秒后超时

javascript - 数据更改时 ng 类不刷新

Java 将一个字符串拆分为两个单词 : Based on even and odd character index

java - Hector 无法正确处理 Java 字符串中的控制字符 - 如何从 Hector 获取十六进制而不是文本字符串?

java - 返回 Try 的方法是否允许抛出异常?

android - 如何使用 RecyclerView 适配器的数据并按参数将它们分成不同的组?

android - 请求服务许可。安卓中号

Java优先级队列实现——内存局部性

android - 通过 osx 命令行构建 tess-two 的问题