微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当数据没有变化时如何读取 Firebase 保存的数据? ||当数据库没有变化时,如何读取保存的数据?

如何解决当数据没有变化时如何读取 Firebase 保存的数据? ||当数据库没有变化时,如何读取保存的数据?

我遇到了一个奇怪的问题。从 Firebase android 应用程序读取时崩溃并给我一个空指针异常。我向你保证,实时数据库中有数据,id也没有错误

目前这个应用分为两部分。

  1. 当我点击“pumpst”时,它会将数据保存到实时数据库中。
  2. 当我点击“sysst”时,它会从实时数据库中读取数据。

场景: 当我打开应用程序并单击 sysst 时,它会崩溃并给我一个异常。但是,当我先点击 pumpst 然后点击 sysst 然后它给了我数据。

问题: 有可能当我打开应用程序时,我想要的第一件事就是数据。但是,快照仅在由于 onDataChange() 方法而发生数据更改时才会检索数据。但是,如果我想读取存储的数据怎么办?

预期工作 当应用程序打开并单击 sysst 时,它应该会显示保存在实时数据库中的数据。

我尝试过的事情 我尝试将尝试和缓存用于读取数据只是为了防止崩溃。但是,现在它因为 valueEventListner 崩溃了。 我试过 youtube 和谷歌。但是,找不到实际的解决方案。

这是我的安卓代码

package com.example.ingene;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import android.content.Intent;
import android.os.Bundle;
import android.util.displayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class HomePage extends AppCompatActivity {

private TextView pumpst,sysst;
DatabaseReference myRef;
String str;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_page);
    init();

    pumpst.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myRef = FirebaseDatabase.getInstance().getReference();

            myRef.child("member").setValue("Mem").addOnSuccessListener(new OnSuccessListener<Void>() 
{
                @Override
                public void onSuccess(Void aVoid) {
                    Toast.makeText(HomePage.this," Data Saved Successfully 
:",Toast.LENGTH_LONG).show();
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(HomePage.this,"Cannot Insert Data...",Toast.LENGTH_LONG).show();
                }
            });
        }
    });

    sysst.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {

                    try {
                        str = snapshot.child("member").getValue().toString();
                        Toast.makeText(HomePage.this,str,Toast.LENGTH_LONG).show();
                    }
                    catch (Exception e){
                        Toast.makeText(HomePage.this,e.toString(),Toast.LENGTH_LONG).show();
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });

        }
    });
}


void init()
{
    pumpst = findViewById(R.id.pump_status_txtv);
    sysst = findViewById(R.id.system_status_txtv);
    
}
}

这里是例外:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ingene,PID: 14234
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.ValueEventListener com.google.firebase.database.DatabaseReference.addValueEventListener(com.google.firebase.database.ValueEventListener)' on a null object reference
    at com.example.ingene.HomePage$2.onClick(HomePage.java:67)
    at android.view.View.performClick(View.java:7256)
    at android.view.View.performClickInternal(View.java:7218)
    at android.view.View.access$3800(View.java:824)
    at android.view.View$PerformClick.run(View.java:27719)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:228)
    at android.app.ActivityThread.main(ActivityThread.java:7782)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)

这是数据库的截图

https://drive.google.com/file/d/1fmb9cFYUg_JpDYCNmDjX-LhxTMRAzIOH/view?usp=sharing

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。