我正在尝试创建一个SQLite Dabase,但是出现异常。该错误并不能说明为什么发生异常。它只是说一个Null引用异常。
var connection = `DependencyService.Get<ISQLiteDB>().GetConnection();`
在构造函数中。
这是我的.cs文件
using App4.Persistence;
using SQLite;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace App4
{
public class Contact
{
[PrimaryKey,AutoIncrement]
public int Id { get; set; }
[MaxLength (255)]
public string Name { get; set; }
}
public partial class MainPage : ContentPage
{
public string ConnectionPath { get; set; }
public MainPage()
{
InitializeComponent();
var connection = DependencyService.Get<ISQLiteDB>().GetConnection();
}
protected async override void OnAppearing()
{
var connection = new SQLiteAsyncConnection(ConnectionPath);
await connection.CreateTableAsync<Contact>();
var contacts = await connection.Table<Contact>().ToListAsync();
listViewContacts.ItemsSource = contacts;
base.OnAppearing();
}
private void buttonAdd_Clicked(object sender, EventArgs e)
{
}
private void buttonDelete_Clicked(object sender, EventArgs e)
{
}
private void buttonUpdate_Clicked(object sender, EventArgs e)
{
}
}
}
这是我通过在iOS和Android中以不同方式实现数据库路径来获取数据库路径的不同信念
>
> using SQLite;
> using System;
> using System.Collections.Generic;
> using System.Text;
>
> namespace App4.Persistence
> {
> public interface ISQLiteDB
> {
> SQLiteAsyncConnection GetConnection();
>
> }
> }
这是iOS和Android中的实现。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using App4.Persistence;
using SQLite;
namespace App4.Droid.Persistence
{
public class SQLiteDB : ISQLiteDB
{
public SQLiteAsyncConnection GetConnection()
{
var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
var DatabasePath = Path.Combine(documentsPath,"MySQLite.db3");
return new SQLiteAsyncConnection(DatabasePath);
}
}
}
尽管iOS和Android的实现是相同的(并且在这种情况下不需要界面),但我将为需要创建不同路径以获取数据库路径的Windows创建项目。
任何帮助都是值得赞赏的人。
谢谢。
答案 0 :(得分:0)
例外的问题是没有在实现类中定义依赖项属性,我应该在名称空间定义的上方而不是在类中使用[assembly: Dependency (typeof (SQLiteDB)]
。
尽管当我尝试通过dependency属性注册实现类时,仍然出现另一个错误。
我收到此错误:
没有对应于形式参数的参数 “ LoadHintArgument”或DependecyAtrrbute.DependencyAttribute(string LoadHint)。
感谢您对该主题的任何帮助。