gpt4 book ai didi

ios - 对象引用未设置到对象的实例 - Select 语句 Sqlite Xamarin iOS

转载 作者:行者123 更新时间:2023-11-28 21:13:47 28 4
gpt4 key购买 nike

我正在我的 iOS 应用程序中从 sqlite 数据库中获取值。我写了一个 Select 语句,如 stringquery = "Select * from tablename"并使用

database.Query

并将值分配给类中的属性。该类具有与 sqlite 数据库表中的列同名的属性。

在执行上述语句时出现错误未将对象引用设置为对象的实例

请提出解决此问题的建议。

谢谢

最佳答案

听起来您没有正确初始化 SQLite 数据库。我在下面添加了代码,展示了如何在 Xamarin.Forms 中实现 SQLite 数据库。

这个 Xamarin.Forms 应用包含一个完全实现的 SQLite 数据库: https://github.com/brminnick/InvestmentDataSampleApp

ISQLite.cs

在 Xamarin.Forms PCL 中创建此文件。它允许我们访问 iOS 和 Android 文件系统以创建我们的数据库连接

using SQLite;

namespace SampleApp
{
public interface ISQLite
{
SQLiteAsyncConnection GetConnection();
}
}

SQLite_Android.cs

在 Android 项目中创建此文件。它返回我们的 SQLite 数据库连接的 Android 文件路径。

using System.IO;

using SampleApp.Droid;

using SQLite;

using Xamarin.Forms;

[assembly: Dependency(typeof(SQLite_Android))]
namespace SampleApp.Droid
{
public class SQLite_Android : ISQLite
{
#region ISQLite implementation
public SQLiteAsyncConnection GetConnection()
{
var sqliteFilename = "DatabaseFileName.db3";
string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder
var path = Path.Combine(documentsPath, sqliteFilename);

var conn = new SQLiteAsyncConnection(path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.SharedCache);

// Return the database connection
return conn;
}
#endregion
}
}

SQLite_iOS.cs

在 iOS 项目中创建此文件。它返回我们的 SQLite 数据库连接的 iOS 文件路径。

using System;
using System.IO;

using SQLite;

using Xamarin.Forms;

using SampleApp.iOS;

[assembly: Dependency(typeof(SQLite_iOS))]
namespace SampleApp.iOS
{
public class SQLite_iOS : ISQLite
{
#region ISQLite implementation
public SQLiteAsyncConnection GetConnection()
{
var sqliteFilename = "DatabaseFileName.db3";
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); // Documents folder
string libraryPath = Path.Combine(documentsPath, "..", "Library"); // Library folder
var path = Path.Combine(libraryPath, sqliteFilename);

var conn = new SQLiteAsyncConnection(path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.SharedCache);

// Return the database connection
return conn;
}
#endregion
}
}

示例模型数据库.cs

在 Xamarin.Forms PCL 中创建此文件

using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;

using SQLite;

using Xamarin.Forms;

namespace SampleApp
{
public static class SampleModelDatabase
{
#region Constant Fields
static readonly SQLiteAsyncConnection _database = DependencyService.Get<ISQLite>().GetConnection();
#endregion

#region Fields
static bool _isInitialized;
#endregion

#region Methods

public static async Task<IList<SampleModel>> GetAllItemsAsync()
{
if (!_isInitialized)
await Initialize();

return await _database.Table<SampleModel>().ToListAsync();
}

public static async Task<int> SaveItemAsync(SampleModel model)
{
if (!_isInitialized)
await Initialize();

return await _database.InsertOrReplaceAsync(model);
}

public static async Task<int> DeleteItemAsync(SampleModel model)
{
if (!_isInitialized)
await Initialize();

return await _database.DeleteAsync(model);
}

public static async Task<int> GetNumberOfRowsAsync()
{
if (!_isInitialized)
await Initialize();

return await _database.Table<SampleModel>().CountAsync();
}

static async Task Initialize()
{
await _database.CreateTableAsync<SampleModel>();
_isInitialized = true;
}
#endregion
}
}

关于ios - 对象引用未设置到对象的实例 - Select 语句 Sqlite Xamarin iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090194/

(stringquery);

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com