【发布时间】:2021-03-19 16:01:59
【问题描述】:
我正在尝试根据从 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)。粗体字是错误所在。我调试它,发现它都是空的。这是我的调试图片
【问题讨论】:
-
您的所有小部件似乎都为空。您是否调用 FindViewById 从您的布局中获取它们?
-
我已经将资源与将要使用的变量绑定在一起。我已经修改了问题并添加了代码供您查看。我的看法是我知道我试图将值放入不存在的对象中,但是当我尝试在 onCreate() 上创建对象时,它不会将创建的对象传递给类 GetData()。
-
那么问题是您要么在初始化最宽的部分之前调用 GetData,要么根本找不到它们。如果没有更多关于 GetData 被调用的位置和 Widget 的位置的上下文,很难判断。
-
我已经可以解决了!将此更新为答案。