已从 Firebase 检索值,但无法映射到资源 (Xamarin Android)

问题描述

我正在尝试根据从 Xamarin Android 上的另一个活动传递的值来检索值。我已经相应地成功检索了数据,它现在位于我的模型类变量中。问题是,我无法将值映射到资源变量上(我已将资源 Id 与变量绑定)。它指出“未将对象引用设置为对象的实例”。据我了解,我试图将值映射到不存在的对象上。我不知道如何解决这个问题...

p/s 我是 Xamarin Android 的初学者。任何形式的帮助表示赞赏。

这是我的模型类的摘录

'''

public class Questions
    {
        public string answer1 { get; set; }
        public string answer2 { get; set; }
        public string answer3 { get; set; }
.......

'''

这是我在活动中的侦听器,用于获取 firebase 中的值并将其相应地映射到我的模型类 '''

public void OnDataChange(DataSnapshot snapshot)
            {
                if (snapshot.Exists())
                {
                    Questions qs = new Questions();
                    var obj = snapshot.Children;
                    foreach (DataSnapshot quest in obj.ToEnumerable())
                    {
                        qs.qid = quest.Key;
                        qs.question = quest.Child("question").Value.ToString();
                        qs.answer1 = quest.Child("answer1").Value.ToString();
                        qs.answer2 = quest.Child("answer2").Value.ToString();
                        qs.answer3 = quest.Child("answer3").Value.ToString();
                        qs.correctanswer = quest.Child("correctanswer").Value.ToString();
}

'''

这里是我尝试映射值的地方。在活动课上也是如此。 '''

 private void GetData(Questions qs)
        {
            **this.TxtQs.Text** = qs.question;
            **this.answer1.Text** = qs.answer1;
            **this.answer2.Text** = qs.answer2;
            **this.answer3.Text** = qs.answer3;
        

} ''' 这是我将资源 ID 与变量绑定的地方(将在 GetData() 处放入值)。 '''

public class kuizActivity2 : BaseActivity,IQuestionsView 
    {
        #region Declare element view
        [BindView(Resource.Id.soalan)]
        public TextView TxtQs { get; set; }


        [BindView(Resource.Id.choice_a_radio)]
        public Button answer1 { get; set; }
            
        [BindView(Resource.Id.choice_b_radio)]
        public Button answer2 { get; set; }

        [BindView(Resource.Id.choice_c_radio)]
        public Button answer3 { get; set; }

....'''

我从我的 OnCreate() 调用了 GetData(qs)。在 BOLD 中是错误所在。我调试它并发现它都是空的。这是我调试的图片

debug bold lines

解决方法

问题已解决!

显然,我试图调用尚未初始化的东西,尽管我对 Cheeseknife(Bind) 函数有点困惑。

我将绑定变量设为静态,然后在 oncreate() 上再次调用它们。而不是调用 GetData();在 oncreate() 上,我从我的听众那里调用了它们。它立即被调用,没有任何空值!

但是,我仍然遇到侦听器在检索第一个值后没有分离的问题。它仍然将值传递给 GetData() 但然后返回到侦听器方法并执行相同的操作,直到它从 firebase 读取所有值。所以 GetData() 被覆盖直到最后一个值,然后才出现在资源上(在手机屏幕上)。