ADO.NET方式举例,(需要引用:Mono.Data.Sqlite) //查询数据 public static IEnumerable<Note> GetAllNotes() { var sql = "SELECT * FROM ITEMS;"; using (var conn = GetConnection()) { conn.Open(); using (var cmd = conn.CreateCommand()) { cmd.CommandText = sql; using (var reader = cmd.ExecuteReader()) { while (reader.Read()) yield return new Note(reader.GetInt32(0), reader.GetString(1), reader.GetDateTime(2)); } } } } //新增和更新数据 public static void SaveNote(Note note) { using (var conn = GetConnection()) { conn.Open(); using (var cmd = conn.CreateCommand()) { if (note.Id < 0) { // Do an insert cmd.CommandText = "INSERT INTO ITEMS (Body, Modified) VALUES (@Body, @Modified); SELECT last_insert_rowid();"; cmd.Parameters.AddWithValue("@Body", note.Body); cmd.Parameters.AddWithValue("@Modified", DateTime.Now); note.Id = (long)cmd.ExecuteScalar(); } else { // Do an update cmd.CommandText = "UPDATE ITEMS SET Body = @Body, Modified = @Modified WHERE Id = @Id"; cmd.Parameters.AddWithValue("@Id", note.Id); cmd.Parameters.AddWithValue("@Body", note.Body); cmd.Parameters.AddWithValue("@Modified", DateTime.Now); cmd.ExecuteNonQuery(); } } } } //删除数据 public static void DeleteNote(Note note) { var sql = string.Format("DELETE FROM ITEMS WHERE Id = {0};", note.Id); using (var conn = GetConnection()) { conn.Open(); using (var cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.ExecuteNonQuery(); } } } //事务支持 using (var conn = GetConnection ()) { conn.Open (); var transaction = conn.BeginTransaction(); try { //Do db operations. transaction.Commit(); } catch { transaction.Rollback(); } } ORM,NHibernate不能运行在Mono for Android上,不过手机应用的业务逻辑相对简单,ORM的需求优先级应该不是很急,暂时可以通过上面的数据访问方式来访问sqlite数据库。类库方面,目前支持的.net类库有限,主要有以下几个: 1 mscorlib 2 System 包含System.Net命名空间,支持HttpWebRequest, HttpWebResponse,这两个类可以实现与服务器端通信 3 System.Core 包含IO, LINQ, Collections,etc 4 System.Data 该类库实现了ADO.NET的相关基础架构,如DataReader, DataAdapter, Connection, Command, etc. 5 System.Data.Services.Client 6 System.EnterpriseServices 7 System.Json 提供了简单的JSON序列化和反序列化支持 8 System.Numberics 9 System.Runtime.Serialization 10 System.ServiceModel 11 System.ServiceModel.Web 12 System.Transactions 提供事务支持,包括分布式事务 13 System.Web.Services 14 System.Xml 15 System.Xml.Linq 16 Microsoft.CSharp 17 //以下几个是Android开发需要的类库 18 Mono.Android MonoDroid核心类库,该类库中提供的API与原生的JAVA API基本一致,所以使用起来很方便; 19 Mono.Android.Export 20 Mono.Android.GoogleMaps 21 Mono.Android.Support.v4 22 Mono.CompilerServices.SymbolWriter 23 Mono.CSharp 24 Mono.Data.SQLite 提供封装了Sqlite数据库的ADO.NET接口支持 25 Mono.Data.Tds 26 Mono.Security 与服务器通信,可以像平时一样通过HttpWebRequest或WebClient来发送请求。以下代码设计了一个通用的通过异步的方式发送HttpWebRequest /// <summary> /// 异步发送HttpWebRequest /// </summary> /// <param name="cookie"></param> /// <param name="url"></param> /// <param name="postData"></param> /// <param name="callback"></param> public static void SendHttpPostRequest(Cookie cookie, string url, string postData, Action<HttpWebResponse> callback) { //解决https下的证书问题 HttpRequestCredentialHelper.SetDefaultCredentialValidationLogic(); var request = HttpWebRequest.Create(url) as HttpWebRequest; //设置请求类型为POST request.Method = "POST"; //设置Post的数据 if (!string.IsNullOrEmpty(postData)) { request.ContentLength = postData.Length; request.ContentType = "application/x-www-form-urlencoded"; using (var writer = new StreamWriter(request.GetRequestStream())) { writer.Write(postData); writer.Close(); } } //将Cookie放入请求,以让服务器知道当前用户的身份 var container = new CookieContainer(); request.CookieContainer = container; if (cookie != null) { container.SetCookies(new Uri(Constants.ROOT_URL), string.Format("{0}={1}", cookie.Name, cookie.Value)); var logger = DependencyResolver.Resolve<ILoggerFactory>().Create(typeof(HttpWebRequestHelper)); logger.InfoFormat("HttpWebRequest CookieName:{0}, Value:{1}", cookie.Name, cookie.Value); } //异步发送请求 request.BeginGetResponse(new AsyncCallback(asyncResult => { var httpRequest = asyncResult.AsyncState as HttpWebRequest; using (var response = httpRequest.EndGetResponse(asyncResult) as HttpWebResponse) { callback(response); } }), request); }
发送请求示例代码:
HttpWebRequestHelper.SendHttpPostRequest(null, url, postData,response =>{ var response = HttpWebRequestHelper.GetTextFromResponse(response); //这里处理HttpWebResponse //如果要反问UI相关元素,则需要封装为一个委托然后在RunOnUiThread方法内执行 RunOnUiThread(() => { var folders = _taskFolderService.GetAllTaskFolders(); _listView.Adapter = new TaskFolderAdapter(this, Resource.Layout.TaskFolderListItem, folders.ToArray()); });});
分层架构,我觉得我们可以采用以下的分层架构: UI 界面层,MonoTouch,MonoDroid分别实现Model 模型层,实现核心业务逻辑,代码可重用,如果采用DDD领域模型来实现,则可以包括:Service,Aggregate,Entity,VO,IRepositoryModel.Infrastructure 基础框架层,实现公共基础代码,供上层调用,如DI,log,configuration,httprequest, constants, etcModel.Repositories 仓储实现层,对Model层的IRepository接口的实现,不同平台采用不同实现
更多介绍关于Mono for Android开发的文章:
http://www.cnblogs.com/liping13599168/archive/2012/06/10/2543549.html
这一篇是介绍关于开发原生Android应用的文章,基本上文章中提到的方法也同样适用于Mono for Android
http://blog.csdn.net/wlanye/article/details/7199831
转载于:https://www.cnblogs.com/mschen/p/4259867.html
相关资源:数据结构—成绩单生成器