알아볼 수없는 매우 이상한 문제가 있습니다. 내 Sqlite DB에 새 항목을 삽입 할 수 없습니다. 이 오류를 수신 계속 : -Xamarin Sqlite-Net Insert (개체 참조가 개체의 인스턴스로 설정되지 않음)
System.NullReferenceException: Object reference not set to an instance of an object.
말 그대로 아무 생각이 왜 똑같은 코드가 작동하고 응용 프로그램 내에서 다른 테이블을 저장합니다. 여기
내 코드입니다 : -User.cs
public class User
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; }
public User()
{
this.Name = " ";
this.EmailAddress = " ";
}
}
UserManager.cs
public class UserManager
{
UserRepository repository;
public UserManager(SQLiteConnection conn)
{
repository = new UserRepository (conn);
}
public User GetDriver(int id)
{
return repository.GetDriver(id);
}
public IList<User> GetDrivers()
{
return new List<User>(repository.GetDrivers());
}
public int SaveDriver(User item)
{
return repository.SaveDriver(item);
}
public int DeleteDriver(int id)
{
return repository.DeleteDriver(id);
}
}
UserRepository.cs
,536,913,632 10public class UserRepository
{
UserDatabase db = null;
public UserRepository(SQLiteConnection conn)
{
db = new UserDatabase(conn);
}
public User GetDriver(int id)
{
return db.GetDriverItem(id);
}
public IEnumerable<User> GetDrivers()
{
return db.GetAllDriverItems();
}
public int SaveDriver(User item)
{
return db.SaveDriverItem(item);
}
public int DeleteDriver(int id)
{
return db.DeleteDriverItem(id);
}
}
UserDatabase.cs (안드로이드)
public class UserDatabase
{
static object locker = new object();
public SQLiteConnection database;
public string path;
public UserDatabase(SQLiteConnection conn)
{
database = conn;
database.CreateTable<User>();
}
public IEnumerable<User> GetAllDriverItems() {
lock (locker) {
return (from i in database.Table<User>() select i).ToList();
}
}
public User GetDriverItem (int id)
{
lock (locker) {
return database.Table<User>().FirstOrDefault(x => x.ID == id);
}
}
public int SaveDriverItem (User item)
{
lock (locker) {
if (item.ID != 0) {
database.Update(item);
return item.ID;
} else {
return database.Insert(item);
}
}
}
public int DeleteDriverItem(int id)
{
lock (locker) {
return database.Delete<User>(id);
}
}
}
Application.cs 여기
public class UserApp : Application
{
public static UserApp Current { get; private set; }
public UserManager UserManager { get; set; }
SQLiteConnection conn;
public UserApp(IntPtr handle, global::Android.Runtime.JniHandleOwnership transfer)
: base(handle, transfer)
{
Current = this;
}
public override void OnCreate()
{
base.OnCreate();
var sqliteFilename = "UserItemDB.db3";
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, sqliteFilename);
conn = new SQLiteConnection(new SQLite.Net.Platform.Generic.SQLitePlatformGeneric(), path);
UserManager = new UserManager(conn);
User testUser= new User();
testUser.Name = "Dave";
testUser.EmailAddress = "[email protected]";
UserApp.Current.UserManager.SaveDriver(testUser);
}
내 스택 추적입니다 : -
System.NullReferenceException: Object reference not set to an instance of an object.
08-09 17:07:32.423 E/mono (31670): at System.Reflection.MonoProperty.GetValue (System.Object obj, System.Object[] index) [0x00031] in <filename unknown>:0
08-09 17:07:32.423 E/mono (31670): at SQLite.Net.TableMapping+Column.GetValue (System.Object obj) [0x00000] in <filename unknown>:0
08-09 17:07:32.423 E/mono (31670): at SQLite.Net.SQLiteConnection.Insert (System.Object obj, System.String extra, System.Type objType) [0x00098] in <filename unknown>:0
08-09 17:07:32.423 E/mono (31670): at SQLite.Net.SQLiteConnection.Insert (System.Object obj) [0x00012] in <filename unknown>:0
08-09 17:07:32.423 E/mono (31670): at Project.DataLayer.UserDatabase.SaveDriverItem (Project.BusinessLayer.Models.User item) [0x00038] in C:\Users\phill\Desktop\Work\ProjectTEST\Project\Project.Shared\DataLayer\UserDat abase.cs:42
08-09 17:07:32.423 E/mono (31670): at Project.DataAccessLayer.UserRepository.SaveDriver (Project.BusinessLayer.Models.User item) [0x00001] in C:\Users\phill\Desktop\Work\ProjectTEST\Project\Project.Shared\DataAccessLayer\U serRepository.cs:30
08-09 17:07:32.423 E/mono (31670): at Project.BusinessLayer.Managers.UserManager.SaveDriver (Project.BusinessLayer.Models.User item) [0x00001] in C:\Users\phill\Desktop\Work\ProjectTEST\Project\Project.Shared\BusinessLayer\Man agers\UserManager.cs:33
08-09 17:07:32.423 E/mono (31670): at Project.Droid.UserApp+ <getDriverDetails>d__16.MoveNext() [0x000e2] in C:\Users\phill\Desktop\Work\ProjectTEST\Project\Project.Droid\Application.cs:75
실행합니다. 지금은 SQL 명령을 사용하는 것으로 되돌 렸지만 이상적이지는 않습니다. – bertusaurus
안녕하세요 @ BrettG86 나는 내 문제를 해결했다고 생각하니, 너와 비슷한가요? –