几天前我问过如何在活动之间共享数据,一个用户告诉我使用SQLite,所以我做了.我想让用户点击MainLayout中的按钮,它会将他重定向到AddTaskLayout,在那里他可以添加任务名称,按下Save按钮应用程序会将他重定向回MainLayout,他的任务将在ListView中列出.

到目前为止,我创建了数据库,表格和我需要的一切.我的问题是:如何将存储在数据库表中的数据添加到ListView?我发现的每个答案都是用Java编写的,所以搜索旧的StackOverflow问题并没有那么有用:/

这是代码:

我的DBRepository是表示创建数据库,创建表,向表插入数据以及获取相同数据的类:

public class DBRepository

{

public void CreateDatabase()

{

string dbPath = Path.Combine(System.Environment.GetFolderPath

(System.Environment.SpecialFolder.Personal), "database.db3");

var db = new SQLiteConnection(dbPath);

}

public void CreateTable()

{

string dbPath = Path.Combine(System.Environment.GetFolderPath

(System.Environment.SpecialFolder.Personal), "database.db3");

var db = new SQLiteConnection(dbPath);

db.CreateTable();

}

public string InsertRecord(string task)

{

string dbPath = Path.Combine(System.Environment.GetFolderPath

(System.Environment.SpecialFolder.Personal), "database.db3");

var db = new SQLiteConnection(dbPath);

ToDoTasks item = new ToDoTasks();

item.Task = task;

db.Insert(item);

return task;

}

public string GetData()

{

string dbPath = Path.Combine(System.Environment.GetFolderPath

(System.Environment.SpecialFolder.Personal), "database.db3");

var db = new SQLiteConnection(dbPath);

string output = "";

var table = db.Table();

foreach(var item in table)

{

output += item;

}

return output;

}

}

我创建表的ToDoTasks类:

[Table("ToDo")]

public class ToDoTasks

{

[PrimaryKey, AutoIncrement, Column("_Id")]

public int Id { get; set; }

[MaxLength(100)]

public string Task { get; set; }

}

我的AddTaskActivity表示用户输入任务名称的第二个布局:

protected override void OnCreate(Bundle bundle)

{

base.OnCreate(bundle);

SetContentView(Resource.Layout.AddTask);

//define buttons

Button save, cancel;

save = FindViewById(Resource.Id.save);

cancel = FindViewById(Resource.Id.cancel);

save.Click += save_click;

cancel.Click += cancel_click;

}

private void save_click(object sender, EventArgs e)

{

DBRepository dbr = new DBRepository();

EditText name = FindViewById(Resource.Id.taskName);

//enter user's input(task name) to table

var result = dbr.InsertRecord(name.Text);

StartActivity(typeof(MainActivity));

}

private void cancel_click(object sender, EventArgs e)

{

StartActivity(typeof(MainActivity));

}

我想要填充listView的MainActivity:

protected override void OnCreate(Bundle bundle)

{

base.OnCreate(bundle);

// Set view

SetContentView(Resource.Layout.Main);

//create database if it doesn't exist

DBRepository dbr = new DBRepository();

dbr.CreateDatabase();

//create table (if it doesn't exist)

dbr.CreateTable();

//Define buttons

Button addTask;

ListView list;

addTask = FindViewById(Resource.Id.addTask);

addTask.Click += addTask_click;

}

private void addTask_click(object sender, EventArgs e)

{

StartActivity(typeof(AddTaskActivity));

}

我非常感谢你的帮助.我知道这些都是非常基本的问题,但有人必须要求他们为自己和许多其他(未来)C#android开发人员.谢谢!

//

更新:我检查了Johan的答案是否正确,但这是(在我的情况下)正确的代码:

我需要更改GetData()方法以返回List(不像以前那样对象),然后在ListView中显示List.这是代码:

You helped me a lot, but I had to make few changes, so here they are for the record:

在DBRepository中需要将GetData()方法更改为:

public List GetData()

{

string dbPath = Path.Combine(System.Environment.GetFolderPath

(System.Environment.SpecialFolder.Personal), "database.db3");

var db = new SQLiteConnection(dbPath);

List data = new List();

foreach (var item in db.Table())

{

var zad = item.Task.ToString();

data.Add(zad);

}

return data;

}

然后,在MainActivity中,ListView的代码只添加:

var items = dbr.GetData();

var listView = FindViewById(Resource.Id.listView);

listView.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, items);

我希望将来可以帮助别人.再次感谢大家.

最佳答案 根据我的评论,您需要进行以下更改.

public List GetData()

{

string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "database.db3");

var db = new SQLiteConnection(dbPath);

return db.Table().ToList();

}

然后在您的Activity中,您可以在其中执行以下操作

protected override void OnCreate(Bundle bundle)

{

base.OnCreate(bundle);

// Set view

SetContentView(Resource.Layout.Main);

//create database if it doesn't exist

DBRepository dbr = new DBRepository();

dbr.CreateDatabase();

//create table (if it doesn't exist)

dbr.CreateTable();

var items = dbr.GetData();

var listView = FindViewById(Android.Resource.Id.ListView);

listView.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, items);

}

如果您的活动继承自ListActivity,您可以执行以下操作

protected override void OnCreate(Bundle bundle)

{

base.OnCreate(bundle);

// Set view

SetContentView(Resource.Layout.Main);

//create database if it doesn't exist

DBRepository dbr = new DBRepository();

dbr.CreateDatabase();

//create table (if it doesn't exist)

dbr.CreateTable();

var items = dbr.GetData();

ListAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, items);

}

app把信息添加到mysql_如何将数据库表中的数据添加到ListView C#Xamarin Android App相关推荐

  1. 在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable。

      在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable. ...

  2. JQuery从Excel表中获取数据添加到select下拉框多选的实现

    JS代码如下 function importf(excel) {var perids = [];//for循环遍历Excel表中的数据,取出需要的列for(var i = 0 ; i < exc ...

  3. 控制器中添加DB类才可以操作数据库表中的数据

    必须使用DB:  use DB;

  4. POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

    POI 简介: POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能. ...

  5. oracle中修改多个字段默认值_利用VBA代码在已有的数据表中删除、添加、修改字段...

    大家好,今日继续给大家讲解VBA数据库解决方案的第21讲,如何利用VBA代码在已有的数据表中删除,添加,修改字段.这个内容是操作数据库的一项必修的内容,还望大家在实际工作中多利用,所以这节的知识,对于 ...

  6. 将数据追加到html 表格中,将数据添加到数据表中

    将数据添加到数据表中 03/30/2017 本文内容 在创建 DataTable 并使用列和约束定义其结构之后,您可以将新的数据行添加到表中. 要添加新行,可将一个新变量声明为 DataRow 类型. ...

  7. 更改Xamarin Android App名称

    更改Xamarin Android App名称 Xamarin Android生成的App名称默认和项目名一致.修改该名称有两种方式. 第一种方式:右击Android项目,选择"属性&quo ...

  8. php修改数据库字段为空,为何修改信息后数据库表中内容为空

    为什么修改信息后数据库表中内容为空 套用上一套修改课题的代码写了一个修改信息的代码,但是将内容修改提交后,再查询表中内容发现除了xuehao其他内容为空? //#################### ...

  9. cpp导入excel到mysql_将EXCEL表格中的数据导入mysql数据库表中

    本文转载自http://blog.sina.com.cn/s/blog_5d972ae00100gjij.html 今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命 ...

最新文章

  1. c++重载(以运算符重载为主)
  2. 大数据是一座孤单的小岛
  3. php调用另一个页面内容,php怎么实现调用另一个页面
  4. bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道
  5. nginx 学习笔记(4) Connection处理方法
  6. file_get_contents设置响应时间timeout的方法
  7. CUDA学习笔记之程序优化
  8. numpy.random随机数模块常用函数总结
  9. javascript最新版本_JavaScript 引擎「V8」发布 8.0 版本,内存占用量大幅下降
  10. 大数据分析平台如何选择
  11. html复选框控制元素禁用,如何勾选复选框时禁用HTML必需属性?
  12. OpenGL中的glutInitDisplayMode()函数的理解
  13. Opencv Camshift对象跟踪
  14. win10 android模拟器 菜单,Win10 Android模拟器教程
  15. 计算机软件编程英语词汇集锦一
  16. 网络安全应急响应有哪些相关知识?
  17. 程序员的幽默笑话(深意爆笑)
  18. C++五子棋源码(Qt版)
  19. 纽约州立大学水牛城分校计算机科学专业,美国布法罗大学(纽约州立大学水牛城分校)介绍/专业/申请条件/奖学金 | Hotcourses中国...
  20. STM32驱动AD7366-5/AD7367-5芯片

热门文章

  1. 关于齐次坐标的理解记录
  2. englishpod主持人对话文本_英语播客ESLPod学习方法+资源大全|Englishpod和eslpod的区别是什么...
  3. 声学测试软件手机版_最新手机性能排名:小米84万分拿到第一,iQOO5Pro第五,华为?...
  4. 网络通信-2(TCP通信、ServerSocket、Socket)
  5. IO-4(BufferedInputStream、BufferedInputStream、BufferedReader、BufferedWriter)
  6. stm32之实时时钟RTC(掉电计时保持、秒中断、闹钟中断、溢出中断)
  7. 怎么知道电脑是32位还是64位_vnc 64位远程控制软件,你用的vnc 远程控制软件是32位还是64位?...
  8. esp32 tool指令参数及说明
  9. 计算机在供电设备中的应用,浅析计算机技术在供电系统中的应用与指导.pdf
  10. 频谱扩展 matlab,使用MATLAB进行频谱分析 | 学步园