如何解决当数据没有变化时如何读取 Firebase 保存的数据? ||当数据库没有变化时,如何读取保存的数据?
我遇到了一个奇怪的问题。从 Firebase android 应用程序读取时崩溃并给我一个空指针异常。我向你保证,实时数据库中有数据,id也没有错误。
目前这个应用分为两部分。
场景: 当我打开应用程序并单击 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 举报,一经查实,本站将立刻删除。