C# 适配器在分配查询时返回null
我从会议表中选择数据并为其分配适配器。这样做,我得到一个System.NullReferenceException:对象引用未设置为对象的实例C# 适配器在分配查询时返回null,c#,android,sqlite,xamarin,C#,Android,Sqlite,Xamarin,我从会议表中选择数据并为其分配适配器。这样做,我得到一个System.NullReferenceException:对象引用未设置为对象的实例 private void LoadData() { listSource = DBConnection.selectTable(); var adapter = new ListViewAdapter(this, listSource); lstViewData.Ad
private void LoadData()
{
listSource = DBConnection.selectTable();
var adapter = new ListViewAdapter(this, listSource);
lstViewData.Adapter = adapter;
}
static public List<Meeting> selectTable()
{
try
{
using (var connection = new SQLiteConnection(System.IO.Path.Combine(Folder, "Organizer.db")))
{
return connection.Table<Meeting>().ToList();
}
}
catch (SQLiteException ex)
{
Log.Info("SQLiteEx", ex.Message);
return null;
}
}
protected override void OnCreate(Bundle savedInstanceState)
{
EditText passwordEditText = FindViewById<EditText>(Resource.Id.passwordEditText);
lstViewData = FindViewById<ListView>(Resource.Id.listView);
}
我用这个项目来做类比:首先,为什么要在
会议
上方添加活动属性,如果会议不是活动,请将其删除
然后我写了一个演示。下面是跑步截图
如果获得System.NullReferenceException:对象引用未设置为对象的实例。
如果Listview为空,请注意,如果为空,则应将Listview
的FindViewById
移动到LoadData
方法上方
lstViewData = FindViewById<ListView>(Resource.Id.listView);
edtidLogin = FindViewById<EditText>(Resource.Id.edtidLogin);
edtidContact = FindViewById<EditText>(Resource.Id.edtidContact);
edtPlace = FindViewById<EditText>(Resource.Id.edtPlace);
var btnAdd = FindViewById<Button>(Resource.Id.btnAdd);
db = new Database();
db.createDatabase();
lstViewData=FindViewById(Resource.Id.listView);
edtidLogin=FindViewById(Resource.Id.edtidLogin);
edtidContact=findviewbyd(Resource.Id.edtidContact);
edtPlace=findviewbyd(Resource.Id.edtPlace);
var btnAdd=findviewbyd(Resource.Id.btnAdd);
db=新数据库();
db.createDatabase();
这是我的主要活动代码
public class MainActivity : AppCompatActivity
{
ListView lstViewData;
List<Meeting> listSource = new List<Meeting>();
Database db;
EditText edtidLogin;
EditText edtidContact;
EditText edtPlace;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
lstViewData = FindViewById<ListView>(Resource.Id.listView);
edtidLogin = FindViewById<EditText>(Resource.Id.edtidLogin);
edtidContact = FindViewById<EditText>(Resource.Id.edtidContact);
edtPlace = FindViewById<EditText>(Resource.Id.edtPlace);
var btnAdd = FindViewById<Button>(Resource.Id.btnAdd);
db = new Database();
db.createDatabase();
// InsertData(db);
btnAdd.Click += BtnAdd_Click;
LoadData();
}
private void BtnAdd_Click(object sender, EventArgs e)
{
var meeting= new Meeting() { idLogin= Int32.Parse( edtidLogin.Text), idContact= Int32.Parse(edtidContact.Text) , Place= edtPlace.Text };
db.insertIntoTable(meeting);
LoadData();
}
private void InsertData(Database db)
{
//throw new NotImplementedException();
Meeting meeting = new Meeting() {
idContact = 1,
idLogin = 1,
Place="Place1"
};
db.insertIntoTable(meeting);
Meeting meeting2 = new Meeting()
{
idContact = 2,
idLogin = 2,
Place = "Place2"
};
db.insertIntoTable(meeting2);
LoadData();
}
private void LoadData()
{
listSource = db.selectTable();
var adapter = new ListViewAdapter(this, listSource);
lstViewData.Adapter = adapter;
}
public类main活动:AppCompatActivity
{
ListView-lstViewData;
List listSource=新列表();
数据库数据库;
EditText-edtidLogin;
EditText-edtidContact;
编辑文本位置;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(这个,savedInstanceState);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.activity_main);
lstViewData=FindViewById(Resource.Id.listView);
edtidLogin=FindViewById(Resource.Id.edtidLogin);
edtidContact=findviewbyd(Resource.Id.edtidContact);
edtPlace=findviewbyd(Resource.Id.edtPlace);
var btnAdd=findviewbyd(Resource.Id.btnAdd);
db=新数据库();
db.createDatabase();
//插入数据(db);
btnAdd.Click+=btnAdd\u Click;
LoadData();
}
私有void BtnAdd_单击(对象发送者,事件参数e)
{
var meeting=new meeting(){idLogin=Int32.Parse(edtilogin.Text),idContact=Int32.Parse(edtidContact.Text),Place=edtPlace.Text};
db.插入表(会议);
LoadData();
}
私有void InsertData(数据库数据库数据库)
{
//抛出新的NotImplementedException();
会议=新会议(){
idContact=1,
idLogin=1,
Place=“Place1”
};
db.插入表(会议);
会议2=新会议()
{
idContact=2,
idLogin=2,
Place=“Place2”
};
db.插入表(会议2);
LoadData();
}
私有void LoadData()
{
listSource=db.selectTable();
var adapter=新的ListViewAdapter(此为listSource);
lstViewData.Adapter=适配器;
}
这是我的演示。
是否
lstViewData
null?您在哪里声明和实例化它?
public class MainActivity : AppCompatActivity
{
ListView lstViewData;
List<Meeting> listSource = new List<Meeting>();
Database db;
EditText edtidLogin;
EditText edtidContact;
EditText edtPlace;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
lstViewData = FindViewById<ListView>(Resource.Id.listView);
edtidLogin = FindViewById<EditText>(Resource.Id.edtidLogin);
edtidContact = FindViewById<EditText>(Resource.Id.edtidContact);
edtPlace = FindViewById<EditText>(Resource.Id.edtPlace);
var btnAdd = FindViewById<Button>(Resource.Id.btnAdd);
db = new Database();
db.createDatabase();
// InsertData(db);
btnAdd.Click += BtnAdd_Click;
LoadData();
}
private void BtnAdd_Click(object sender, EventArgs e)
{
var meeting= new Meeting() { idLogin= Int32.Parse( edtidLogin.Text), idContact= Int32.Parse(edtidContact.Text) , Place= edtPlace.Text };
db.insertIntoTable(meeting);
LoadData();
}
private void InsertData(Database db)
{
//throw new NotImplementedException();
Meeting meeting = new Meeting() {
idContact = 1,
idLogin = 1,
Place="Place1"
};
db.insertIntoTable(meeting);
Meeting meeting2 = new Meeting()
{
idContact = 2,
idLogin = 2,
Place = "Place2"
};
db.insertIntoTable(meeting2);
LoadData();
}
private void LoadData()
{
listSource = db.selectTable();
var adapter = new ListViewAdapter(this, listSource);
lstViewData.Adapter = adapter;
}