问题描述
我正在尝试根据从 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 中是错误所在。我调试它并发现它都是空的。这是我调试的图片
解决方法
问题已解决!
显然,我试图调用尚未初始化的东西,尽管我对 Cheeseknife(Bind) 函数有点困惑。
我将绑定变量设为静态,然后在 oncreate() 上再次调用它们。而不是调用 GetData();在 oncreate() 上,我从我的听众那里调用了它们。它立即被调用,没有任何空值!
但是,我仍然遇到侦听器在检索第一个值后没有分离的问题。它仍然将值传递给 GetData() 但然后返回到侦听器方法并执行相同的操作,直到它从 firebase 读取所有值。所以 GetData() 被覆盖直到最后一个值,然后才出现在资源上(在手机屏幕上)。