Xamarin,Firebase:"默认FirebaseApp未在此过程中初始化" - 虽然调用了initializeApp()?

时间:2017-06-08 13:24:03

标签: android firebase xamarin

我开始对这条线疯狂:

Java.Lang.IllegalStateException:此过程com.TalkAboutTv.TalkAboutTv中未初始化默认FirebaseApp。请务必先调用FirebaseApp.initializeApp(Context)。

我不知道造成这种情况的原因。我在调用FirebaseApp.IntApp(这个)并且我的包名是匹配的......为什么它不起作用?

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
}



protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView (Resource.Layout.Main);

    firebase = new FirebaseClient("2131099704");
    Firebase.FirebaseApp.InitializeApp(this);

    FirebaseDatabase.Instance.GetReference("chats").AddValueEventListener(this);

    fab = FindViewById<Button>(Resource.Id.fab);
    edtChat = FindViewById<EditText>(Resource.Id.input);
    lstChat = FindViewById<ListView>(Resource.Id.list_of_messages);


    fab.Click += delegate
    {

        PostMessage();
    };



    if (FirebaseAuth.Instance.CurrentUser == null)
        StartActivityForResult(new Android.Content.Intent(this, typeof(SignIn)), MyResultCode);
    else
    {
        Toast.MakeText(this, "Welcome " + FirebaseAuth.Instance.CurrentUser.Email, ToastLength.Short).Show();
        DisplayChatMessage();
    }
}

private async void PostMessage()
{
    var items = await firebase.Child("chats").PostAsync(new MessageContent(FirebaseAuth.Instance.CurrentUser.Email, edtChat.Text));
    edtChat.Text = "";
}

public void OnCancelled(DatabaseError error)
{

}

public void OnDataChange(DataSnapshot snapshot)
{
    DisplayChatMessage();
}

private async void DisplayChatMessage()
{
    lstMessage.Clear();
    var items = await firebase.Child("chats")
        .OnceAsync<MessageContent>();

    foreach (var item in items)
        lstMessage.Add(item.Object);
    ListViewAdapter adapter = new ListViewAdapter(this, lstMessage);
    lstChat.Adapter = adapter;
    }
}

}

4 个答案:

答案 0 :(得分:3)

尝试在Application类中初始化firebase(OnCreate方法)。 但首先从项目控制台下载google-services.json文件,并确保它具有“GoogleServicesJson”值作为Build Action。

答案 1 :(得分:2)

我正在开发一个新应用,但是我没有启用Internet权限。这解决了我的问题

答案 2 :(得分:0)

不需要需要做的另一件事是从您的FirebaseApp.initializeApp(this)方法中调用MainActivity.OnCreate()。如果这样做,您可能应该删除该调用,因为这是不必要的,并且可能会导致下游并发症。

我尝试删除binobj文件夹,确保我的google-services.json具有正确的GoogleServicesJson构建类型,并且已正确选择了构建类型放在我的fsproj(或csproj,如果您仍在使用C#)文件中。但是错误仍然在发生。

我做错了,是我的包裹名称有错字。如果执行了上述所有步骤,请检查package_name文件中的google-services.json字段,并确保它与项目的程序包名称完全对应。 然后清理并重建项目。

答案 3 :(得分:0)

如果以上方法都不适合您。检查项目设置。在“ AndroidManifest.xml”中添加或确认您具有以下内容。内部应用程序 <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" /> <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="${id app from firebase console }" /> </intent-filter> </receiver>