gpt4 book ai didi

c# - Xamarin ListView 显示来自 SQLite 数据库 C# Android 的项目

转载 作者:行者123 更新时间:2023-11-30 23:32:58 26 4
gpt4 key购买 nike

在我的例子中,我想显示我创建的本地 SQLite 数据库中的项目,如下所示:

public string CreateDB() //create database
{
var output = "";
string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "IsoModule.db3");
output = "Database Created";
return output;
}

public string CreateTable() //create table
{
try
{
string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "IsoModule.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<UserInfo>();
db.CreateTable<TableInfo>();
string result = "Table(s) created";
return result;
}
catch (Exception ex)
{
return ("Error" + ex.Message);
}
}

这是我希望检索数据的代码

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "IsoModule.db3");
var tablelistout = new SQLiteConnection(path);
var alltables = tablelistout.Table<TableInfo>();
foreach (var listing in alltables)
{
var from = new string[]
{
listing.tname + " - " + listing.status
};

ListView listtable = (ListView)FindViewById(Resource.Id.listtable);
listtable.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, from);
}

代码运行时没有错误,但它只显示表中的最后一项。这让我很困惑,所以我想问一下如何从特定表中检索所有数据?或者,如果有人问过同样的问题,请与我分享链接。很多人都很感激。

最佳答案

var alltables = tablelistout.Table<TableInfo>();
var data = new List<string>();
foreach (var listing in alltables)
{
data.Add(listing.tname + " - " + listing.status);
}

ListView listtable = (ListView)FindViewById(Resource.Id.listtable);
listtable.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, data.ToArray());

我所做的只是将 2 件事移出循环。首先,我搬出了数组的初始化。其次,我搬出了适配器的listView +赋值。

你的问题是在循环中,你总是覆盖你在上一次迭代中所做的一切(就像你说的那样留下最后一项)。

此外,您应该注意,如果您计划拥有大量数据,那么创建自定义适配器对您来说很重要。 ArrayAdapter 是一个 native Android 类,然后由 C# Xamarin 对象包装,这意味着您每行将同时拥有一个 C# 和 Java 对象。它增加了开销,因为两个垃圾收集器都有工作要做并且可能导致性能问题。 Xamarin 开发人员通常倾向于避免使用它,但快速原型(prototype)制作除外。

另一方面,我会使用 FindViewById<T>(Int32)而不是 FindViewById(Int32)并类型转换它。 FindViewById<ListView>(Resource.Id.listtable)在你的情况下。只是利用泛型的力量。

关于c# - Xamarin ListView 显示来自 SQLite 数据库 C# Android 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100382/

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