【发布时间】:2020-06-03 21:53:59
【问题描述】:
我的spinner 的adapter 有问题,它从SQLite 数据库 获取数据并尝试显示一堆字符串作为微调器的结果。
它向我发送以下错误消息:
“抛出了 'Java.Lang.NullPointerException' 类型的异常。”
当我在应用程序运行的情况下单击微调器时,如果它不在 try/catch 中,应用程序将冻结。
谁能帮我找出问题所在?代码如下:
活动代码
private string[] _companyNames;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
SetContentView(Resource.Layout.a_plant);
Spinner spCompanyName = FindViewById<Spinner>(Resource.Id.spCompanyName);
EditText etPlantName = FindViewById<EditText>(Resource.Id.etPlantName);
Button btnAdd = FindViewById<Button>(Resource.Id.btnAdd);
Button btnSearch = FindViewById<Button>(Resource.Id.btnSearch);
//Adds data to the spinner only if they dont exist already
DBManager.LoadCompanySpinner(_companyNames);
//shows data on spinner
try
{
//THIS IS WHERE THE EXCEPTION IS CAUGHT
ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, _companyNames);
//
adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
spCompanyName.Adapter = adapter;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
DBManager在spinner上添加数据的代码
我相信这段代码可以工作,因为它会在控制台上打印结果。
//insert data in spinner
public static void LoadCompanySpinner(string[] l)
{
var t = DBManager.Instance.Query<Company>("Select CompanyName from company");
int size = t.Count;
if(size > 0)
{
l = new string[size + 1];
l[0] = "Select Company...";
for (var i = 0; i < size; i++)
{
l[i + 1] = t[i].CompanyName;
Console.WriteLine("added " + t[i].CompanyName);
}
}
}
【问题讨论】:
-
您是否检查了该行中的每个项目的非空值?
-
@Jason 你能告诉我该怎么做吗?
-
使用调试器在该行添加断点并检查每个值
-
@Jason 它只是不让我通过适配器创建行,它在我第一次通过它时抛出异常
-
你没有通过它,你停止它并检查每个参数。
标签: c# android xamarin spinner adapter