Android Firebase - setPersistenceEnabled(true)使应用程序崩溃 [英] Android Firebase - setPersistenceEnabled(true) crashing the app

查看:276
本文介绍了Android Firebase - setPersistenceEnabled(true)使应用程序崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我只是尝试Firebase更新来自实时数据库的工具栏活动标签。我收到以下错误:

  12-21 00:25:19.890 10295-10295 / com.xlr8labs.FirebaseAuth E / AndroidRuntime:FATAL EXCEPTION:main 
进程:com.xlr8labs.FirebaseAuth,PID:10295
java.lang.RuntimeException:无法启动活动ComponentInfo {com.xlr8labs.FirebaseAuth / com.xlr8labs.FirebaseAuth.RegisterActivity }:com.google.firebase.database.DatabaseException:必须在FirebaseDatabase实例的任何其他用法之前调用setPersistenceEnabled()。
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2341)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393)
at android.app.ActivityThread.access $ android.app.ActivityThread
(ActivityThread.java:1324) $ b at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThrea d.java:5295)
at java.lang.reflect.Method.invokeNative(Native Method)$ b $ at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:828)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
at dalvik。 system.NativeStart.main(本机方法)
由com.google.firebase.database.DatabaseException引起:必须在对FirebaseDatabase实例进行任何其他用法之前调用setPersistenceEnabled()。
在com.google.firebase.database.FirebaseDatabase.zzhM(未知源)
在com.google.firebase.database.FirebaseDatabase.setPersistenceEnabled(未知源)
在com.xlr8labs.FirebaseAuth .BackActivity.onCreate(RegisterActivity.java:35)
at android.app.Activity.performCreate(Activity.java:5264)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393)
在android.app.ActivityThread.access $ 800(ActivityThread.java:151)
在android.app.ActivityThread $ H.handleMessage( (android)
android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android .app.ActivityThread.main(ActivityThread.java:5295)
at java.lang.reflect.Method.invokeNative(Native Method)
在java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:828)
at com.android .internal.os.ZygoteInit.main(ZygoteInit.java:644)
at dalvik.system.NativeStart.main(Native Method)

即使我在调用数据库实例的其他方法之前使用了setPersistenceEnabled(),我仍然得到这个错误。这里是我的Activity.java代码:

  public class RegisterActivity extends AppCompatActivity {
private FirebaseDatabase mFirebaseInstance;
@Override
protected void onCreate(Bundled savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
// ------------------实时从数据库更新活动标签------
mFirebaseInstance = FirebaseDatabase.getInstance();
mFirebaseInstance.setPersistenceEnabled(true);
mFirebaseInstance.getReference(RegisterLabel)。keepSynced(true);
mFirebaseInstance.getReference(RegisterLabel)。addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
Log.e(LOG_TAG,Register );
String appTitle = dataSnapshot.getValue()。toString();
getSupportActionBar()。setTitle(appTitle);
}

@Override
public void onCancelled(DatabaseError databaseError){
$ b}
});
// -------------------------------------------- -------------------------------

什么是造成这次事故的原因。我在另外两个活动中使用了完全相同的代码片段。

解决方案这部分 mFirebaseInstance。 setPersistenceEnabled(true); 应该只在第一个Activity中。它不应该被称为不止一次。

更好的解决方案是将该行放在Application类的onCreate方法中。您可以阅读更多有关此处


So I was just trying out Firebase to update Toolbar label of activities from realtime database. I am getting the following error:

12-21 00:25:19.890 10295-10295/com.xlr8labs.FirebaseAuth E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.xlr8labs.FirebaseAuth, PID: 10295
                                                                       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xlr8labs.FirebaseAuth/com.xlr8labs.FirebaseAuth.RegisterActivity}: com.google.firebase.database.DatabaseException: Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.
                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2341)
                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393)
                                                                           at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                           at android.os.Looper.loop(Looper.java:193)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5295)
                                                                           at java.lang.reflect.Method.invokeNative(Native Method)
                                                                           at java.lang.reflect.Method.invoke(Method.java:515)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
                                                                           at dalvik.system.NativeStart.main(Native Method)
                                                                        Caused by: com.google.firebase.database.DatabaseException: Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.
                                                                           at com.google.firebase.database.FirebaseDatabase.zzhM(Unknown Source)
                                                                           at com.google.firebase.database.FirebaseDatabase.setPersistenceEnabled(Unknown Source)
                                                                           at com.xlr8labs.FirebaseAuth.RegisterActivity.onCreate(RegisterActivity.java:35)
                                                                           at android.app.Activity.performCreate(Activity.java:5264)
                                                                           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2393) 
                                                                           at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324) 
                                                                           at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                           at android.os.Looper.loop(Looper.java:193) 
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5295) 
                                                                           at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                           at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 
                                                                           at dalvik.system.NativeStart.main(Native Method) 

Even though I'm using setPersistenceEnabled() before calling any other methods on my database instance, I'm still getting this error. Here is my Activity.java code:

public class RegisterActivity extends AppCompatActivity {
 private FirebaseDatabase mFirebaseInstance;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        // ------------------ Update activity label from database in realtime ------
        mFirebaseInstance = FirebaseDatabase.getInstance();
        mFirebaseInstance.setPersistenceEnabled(true);
        mFirebaseInstance.getReference("RegisterLabel").keepSynced(true);
        mFirebaseInstance.getReference("RegisterLabel").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.e(LOG_TAG,"Register label changed");
                String appTitle = dataSnapshot.getValue().toString();
                getSupportActionBar().setTitle(appTitle);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        // ---------------------------------------------------------------------------

What is causing the crash. I'm using the exact same snippet on two other activities...

解决方案

This part mFirebaseInstance.setPersistenceEnabled(true); should be just in first Activity. It's shouldn't be called more than once.

Better solution would be to put that line in onCreate method of your Application class. You can read more about it here.

这篇关于Android Firebase - setPersistenceEnabled(true)使应用程序崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆