【问题标题】:Illegal State Exception Firebase Database非法状态异常 Firebase 数据库
【发布时间】:2017-09-13 13:01:58
【问题描述】:

我正在尝试使用 Firebase 数据库,但面临非法状态异常

默认 FirebaseApp 未在此进程 com.example 中初始化。 请务必先调用 FirebaseApp.initializeApp(Context)。

我创建了一个可以从任何地方实例化的 Utility 类。我在应用程序和活动(onCreate)级别都尝试过,结果是一样的。

public class FirebaseUtils {
    private static final String TAG = FirebaseUtils.class.getSimpleName();

    private static FirebaseDatabase mFirebaseDatabase;
    private static DatabaseReference mDbReference;

    // listeners
    private static OnFirebaseValueListener mFirebaseValueListener;

    /**
     * Method is used to set callback to listen to value changes in Firebase DB
     *
     * @param listener
     */
    public static void onFirebaseValueListener(OnFirebaseValueListener listener) {
        mFirebaseValueListener = listener;
    }

    /**
     * Constructor
     */
    public FirebaseUtils(Context context) {
        FirebaseApp.initializeApp(context);
        mFirebaseDatabase = FirebaseDatabase.getInstance();
        mDbReference = mFirebaseDatabase.getReference();
    }

    /**
     * Method is used to add a list of values to Firebase DB
     *
     * @param alHistory
     */
    public static void addValues(List<?> alHistory) {
        if (!FrameworkUtils.checkIfNull(mDbReference)) {
            // set value
            mDbReference.setValue(alHistory);
            mDbReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Log.i(TAG, "<onDataChange> successful!");
                    if (!FrameworkUtils.checkIfNull(mFirebaseValueListener)) {
                        mFirebaseValueListener.onDataChange(dataSnapshot);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    if (!FrameworkUtils.checkIfNull(databaseError) && !FrameworkUtils.isStringEmpty(databaseError.getMessage())) {
                        Log.i(TAG, "<onCancelled> error: " + databaseError.getMessage());
                        if (!FrameworkUtils.checkIfNull(mFirebaseValueListener)) {
                            mFirebaseValueListener.onCancelled(databaseError);
                        }
                    }
                }
            });
        }
    }

    /**
     * Method is used to retrieve a list of values from Firebase DB
     */
    public static void retrieveValues() {
        mDbReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.i(TAG, "<onDataChange> successful!");
                if (!FrameworkUtils.checkIfNull(mFirebaseValueListener)) {
                    mFirebaseValueListener.onDataChange(dataSnapshot);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                if (!FrameworkUtils.checkIfNull(databaseError) && !FrameworkUtils.isStringEmpty(databaseError.getMessage())) {
                    Log.i(TAG, "<onCancelled> error: " + databaseError.getMessage());
                    if (!FrameworkUtils.checkIfNull(mFirebaseValueListener)) {
                        mFirebaseValueListener.onCancelled(databaseError);
                    }
                }
            }
        });
    }
}

我是这样实例化的

// instantiate FirebaseUtils
        new FirebaseUtils(this);

我已经在 gradle 中添加了我所有的依赖项

dependencies {       
     compile 'com.google.firebase:firebase-database:10.2.1'
}

我在 Manifest 中有 Internet 权限

<uses-permission android:name="android.permission.INTERNET" />

我在 Firebase 上是否缺少某种设置?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    感谢所有试图给出答案但这些答案不起作用的人。我想到了。我所做的是使用选项初始化 FirebaseApp。

    如果其他人已完成设置 Firebase 数据库的所有步骤,但仍收到该非法异常错误,您可能需要尝试使用选项来实例化您的 FirebaseApp。

    首先创建您的选项

    FirebaseOptions options = new FirebaseOptions.Builder()
                    .setApiKey("key")
                    .setDatabaseUrl("url")
                    .setApplicationId("ID")
                    .build();
    

    现在用它来实例化 FirebaseApp

    FirebaseApp app = FirebaseApp.initializeApp(context, options);
    

    现在您已完成该步骤,实例化您的 FirebaseDatabase

    FirebaseDatabase firebaseDb = FirebaseDatabase.getInstance(app);
    

    您将能够执行以下操作

    DatabaseReference rootRef = firebaseDb.getReference();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-13
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多