C# 实现安卓和iOS app 读写数据库,实现手机本地存储
一、向源代码添加SQLite
向解决方案添加NuGet包
右击解决方案 > 管理解决方案的NuGet 程序包
在“浏览”选项卡中搜索“sqlite-net-pcl”NuGet 包 ,如上图
许多 NuGet 包都有着类似的名称。 正确找到项目要用的包,具有以下属性:
- 作者:SQLite-net
- NuGet 链接:sqlite-net-pcl
二、向源代码加入数据库代码
有三层架构的开发经验的人员,了解MVC框架的开发者,会很熟悉下面的代码。
1、项目中添加Models文件夹
2、向Models 文件夹下添加cs文件,取名“StockDiff.cs”, 它是对应SQLite表的类。相当于MVC中的M
3、项目中添加Data文件夹
4、向Data文件夹下添加cs文件,取名“StockDiffDatabase.cs”,它则是类似于三层架构中数据库操作类。代码如下:
public class StockDiffDatabase{SQLiteAsyncConnection database;public StockDiffDatabase(string dbpath){try{database = new SQLiteAsyncConnection(dbpath);database.CreateTableAsync<Models.StockDiff>().Wait();}catch (Exception ex){throw ex;}}public System.Threading.Tasks.Task<List<Models.StockDiff>> GetListAsync(){try{return database.Table<Models.StockDiff>().ToListAsync();}catch (Exception ex){throw ex;}}public Task<Models.StockDiff> GetOneAsync(int id){try{returndatabase.Table<Models.StockDiff>().Where(i => i.ID == id).FirstOrDefaultAsync();}catch (Exception ex){throw ex;}}public Task<int> SaveUpdateAsync(Models.StockDiff item){try{if (item.ID != 0){returndatabase.UpdateAsync(item);}else{returndatabase.InsertAsync(item);}}catch (Exception ex){throw ex;}}public Task<int> Delete(Models.StockDiff o){try{returndatabase.DeleteAsync(o);}catch (Exception ex){throw ex;}}public Task<int> DeleteAll(){try{TableMapping m = new TableMapping(typeof(Models.StockDiff));return database.DeleteAllAsync(m);}catch (Exception ex){throw ex;}}}
上述C#数据库操作类需要的引用如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using SQLite;
此块C#源码包含创建数据库、读取数据、写入数据以及删除单行数据和清空数据的代码。 代码使用后台线程的异步 SQLite.NET API。 此外,StockDiffDatabase
构造函数将数据库文件的路径作为参数。
三、让 安卓 和 iOS 应用调用上述操作数据库代码
- App.xaml.cs 是整个程序的入口,所以数据库的初始化在此处执行
- 下面的代码相当于MVC框架中的V的内容,就是在界面上操作按钮,打开APP数据加载并显示
1、展开“App.xaml”,然后双击“App.xaml.cs”将其打开 ,添加代码
此处使用了单一实例模式,无论是JAVA 还是 C# 开发者,都能很容易看明白此处代码。,将SQLite数据库文件路径做为参数,实例化数据库操作类。 这样就可以在后续功能中使用它。
2、在按钮中实现保存功能
Models.StockDiff oo = new Models.StockDiff();
oo.Amt = int.Parse( txtAmt.Text);
oo.PriceSold = decimal.Parse(txtSold.Text);
oo.PriceBuy = decimal.Parse(txtBuy.Text);
oo.PriceFinal = decimal.Parse(fin.ToString("f2"));Task<int> ii = App.Database.SaveUpdateAsync(oo);((Button)FindByName("btnClear")).IsVisible = true;
SaveUpdateAsync() 方法使用了LINQ,所以并不需要我们再写Insert 或 update了。保存数据后,会显示btnClear清空按钮,用于清空列表显示
3、从数据库读取数据并绑定控件显示
基于移动端控件的不同,这里肯定不再像以前c# winform,asp.net中那些datagrid , repeater这样的控件。这里使用的是移动端开发独有的TableView,StackLayout 控件。
protected override async void OnAppearing()
{base.OnAppearing();TableView tbv = (TableView)FindByName("tbV");List<Models.StockDiff> lst = await App.Database.GetListAsync();if (lst.Count == 0){((Button)FindByName("btnClear")).IsVisible = false;}foreach (Models.StockDiff o in lst){#regiontry{var layout = new StackLayout() { Orientation = StackOrientation.Horizontal };layout.Children.Add(new Label(){Text = o.Amt.ToString(),TextColor = Color.FromHex("#503026"),VerticalOptions = LayoutOptions.Center});layout.Children.Add(new Label(){Text = o.PriceSold.ToString(),TextColor = Color.FromHex("#503026"),VerticalOptions = LayoutOptions.Center,});layout.Children.Add(new Label(){Text = o.PriceBuy.ToString(),TextColor = Color.FromHex("#503026"),VerticalOptions = LayoutOptions.Center,});layout.Children.Add(new Label(){Text = "结果:" + o.PriceFinal.ToString("f2"),TextColor = Color.FromHex("#0f0f0f"),VerticalOptions = LayoutOptions.Center,HorizontalOptions = LayoutOptions.EndAndExpand});tbv.Root.Insert(0,new TableSection(){new ViewCell() {View = layout}});}catch (Exception ex){}#endregion}}
OnAppearing 是在app加载界面时会执行的方法,绑定数据并显示就写在此。
原理:
- 从本机数据库中读取数据放进LIST中
- 以Stacklayout方式动态的将LIST中的数据加载进来后塞进TableView中完成在app界面中展示数据(这样的方式展示数据是基于tableview控件的展示需要,是用Tableview还是其它控件则由开发者决定,不同的控件则这里的代码就会不同)
- 如果数据没有则隐藏btnClear清空按钮,如果有数据则不隐藏。
写在最后:
通过Xamarin,C# 开发者可以很容易的上手开发安卓和iOS app读写手机本地数据库存储,而且是一份代码两种APP跨平台使用。
C#和JAVA 开发者烂熟于心的三层架构、MVC、数据库单例模式的开发思维,也可毫无阻碍的使用在跨平台的app开发中
Xamarin难道还是鸡肋吗????
博主往期文章:
c# 比JAVA弱吗? 用c#一份源码同时生成安卓和IOS APP
.NET C#开发app在iphone 真机上运行调试
C# 实现安卓和iOS app 读写数据库,实现手机本地存储相关推荐
- Android(安卓)订餐APP(Sqlite数据库,完整的增删改查)
Android(安卓)订餐APP(Sqlite数据库,完整的增删改查) 一.背景 首先说说项目的背景,基于地铁口鸡蛋饼的一个小项目,APP中固定设置的鸡蛋饼搭配,顾客也可以自己搭配 二.开发环境 A ...
- c# 比JAVA弱吗? 用c#一份源码同时生成安卓和IOS APP
Visual Studio 2019调试 安卓和IOS开发的app 上图为C# 同一份源码在红米note 1S 的真机上运行安卓app,和iphone 13 模拟器运行ios版app. (因为ios ...
- 苹果手机 微信PHP问题,安卓、ios APP调用微信支付时,页面出现空白 。(php微信支付,app发起微信支付白屏)?...
安卓.ios APP调用微信支付时,页面出现空白 我的后端是用php开发的.我是先调用微信的统一下单生成,生成prepay_id预支付订单号,代码如下: public function send_pa ...
- android源码 meizhi,74款安卓和IOS app源码地址
知乎专栏App https://github.com/bxbxbai/ZhuanLan WeChat高仿微信 项目地址: https://github.com/motianhuo/wechat Gan ...
- (安卓,IOS系统)按键精灵手机版连接sqlserver ,mysql等远程数据库,进行批量自动处理。
好消息!!! 开放免费的数据云存储平台:数据云空平台 默认账号:demo,密码:123456 通过按键精灵批量读取服务器上游戏账号列表,进行登录功能,可用来搬砖... 入主题: ☞☞首先服务器端搭建个 ...
- iOS App更换图标Logo(本地更换)
1.各大购物平台在节假日都是更换App Icon图标 通常有两种方式:1.每换一个新的图标,需要重新上一次AppStore: 2.在项目里预留好未来需要更换的图标,用api触发(或者本地时间判断自动更 ...
- app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览
ylerjen.. 17 AppCache使用清单文件来定义应用程序应该存储哪些文件(您可以缓存文件和资源,如HTML页面,JS脚本,CSS样式,图像......) LocalStorage将存储数据 ...
- 深度linux支持安卓,深度操作系统 V20(1003)内测版招募:新增手机助手,支持安卓和 iOS 端,管理手机应用、文件...
IT之家9月28日消息 深度操作系统今天发布深度操作系统 20(1003)内测活动招募说明,IT之家获悉,本次操作系统将新增手机助手,支持安卓和iOS端,方便管理手机应用.文件等. 更新说明: 1.新 ...
- ios app开发学习流程(入门到精通)
一.xcode编译并运行app后,iphone模拟器已安装的app所在目录: # 1. /Users/alpha/Library/Application Support/iPhone Simulato ...
最新文章
- {}是set类型还是dict类型呢
- android subString
- 今天在海淀黄庄地铁站真实经历 写下来希望我的好友可以看一下!
- 七大因素阻碍非标自动化行业发展,那么应对的策略是什么呢?
- linux awk 常见字符串处理
- html 标签内背景图片自适应 div 大小
- LeetCode 287. Find the Duplicate Number
- windows下javadoc生成文档注释的命令
- 写项目经历的注意事项
- [tensorflow]tensorflow2.1.0使用内置方法进行培训和评估
- h3c,nat网络地址转换
- .html() 与.text() 获取值、取值 区别
- 一文搞懂深度学习中常用的优化算法
- nuxt.js项目打包上传服务器pm2启动各种问题
- 一个月攻克托业--复旦大学考生
- 2018高中计算机会考时间,2018高中会考时间安排_2018年高中会考什么时候考哪些科目...
- 给大家推荐一下常用的镜像站
- Planned Contrasts and Post hoc Tests 多重检验校正
- iphone 4 微信版本过低
- ERROR 1010 (HY000): Error dropping database (can't rmdir './library', errno: