我正在尝试使用Firebase数据库但面临非法状态异常
默认FirebaseApp未在此过程com.example中初始化。 请务必先调用FirebaseApp.initializeApp(Context)。
我创建了一个可以从任何地方实例化的Utility类。我已经尝试过Application和Activity(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中拥有互联网许可
<uses-permission android:name="android.permission.INTERNET" />
Firebase上是否存在我缺少的某种设置?
答案 0 :(得分:0)
感谢所有试图给出答案的人,但这些答案都不起作用。我想到了。我所做的是使用选项初始化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();