Xamarin Android应用连接在线数据库方案咨询及示例请求
Hey there! 作为第一次上手Xamarin开发Android应用的新手,你的困惑太能共情了——直接碰数据库不仅不安全,找免费又靠谱的方案也确实容易绕晕。我给你整理了一套低成本甚至完全免费的落地思路,还有实打实的代码示例,一步步来就能搞定:
一、优先推荐的免费中间层方案:Firebase Firestore
为什么首推它?因为完全不需要自己搭建服务器,Firebase提供了现成的后端服务,免费额度(Spark计划)对于个人学习项目来说完全够用——5GB存储、10GB带宽、每月10万次读操作,基本能覆盖你的需求。而且Xamarin有官方绑定的SDK,集成简单,天然通过API操作数据,根本不会暴露SQL语句,完美符合你的安全要求。
二、实现步骤 + 代码示例
1. 前期准备(Firebase控制台配置)
- 去Firebase控制台创建新项目,添加Android应用
- 下载自动生成的
google-services.json文件,放到Xamarin Android项目的Assets文件夹中,然后右键设置它的生成操作为GoogleServicesJson - 在Firebase控制台开启Firestore数据库,选择“测试模式”(新手阶段先用这个,后续再改权限)
2. 安装必要的NuGet包
打开NuGet包管理器,搜索并安装以下包:
Xamarin.Firebase.FirestoreXamarin.GooglePlayServices.BaseXamarin.AndroidX.Core
3. 定义数据模型
先创建一个对应数据库集合的实体类,比如我们做一个用户数据的示例:
using Firebase.Firestore; [FirestoreData] public class UserData { [FirestoreProperty] public string Name { get; set; } [FirestoreProperty] public int Age { get; set; } // 可以根据需求添加更多字段,比如Email、CreateTime等 }
4. 新增数据(Create操作)
这个方法会把用户数据上传到Firestore的Users集合中:
using Firebase.Firestore; using Android.App; using System.Threading.Tasks; public async Task AddNewUser(string userName, int userAge) { try { // 获取Firestore实例 var firestoreDb = FirebaseFirestore.Instance; // 创建一个自动生成ID的文档引用(也可以指定自定义ID) var userDocRef = firestoreDb.Collection("Users").Document(); // 构造数据对象 var newUser = new UserData { Name = userName, Age = userAge }; // 上传数据 await userDocRef.SetAsync(newUser); // 操作成功提示 Toast.MakeText(Application.Context, "用户数据新增成功!", ToastLength.Short).Show(); } catch (Exception ex) { Toast.MakeText(Application.Context, $"新增失败:{ex.Message}", ToastLength.Long).Show(); } }
5. 查询数据(Read操作)
示例1:查询所有用户
using Firebase.Firestore; using System.Collections.Generic; using System.Threading.Tasks; public async Task<List<UserData>> GetAllUsers() { var userList = new List<UserData>(); try { var firestoreDb = FirebaseFirestore.Instance; // 获取Users集合的所有文档 var querySnapshot = await firestoreDb.Collection("Users").GetAsync(); foreach (var doc in querySnapshot.Documents) { if (doc.Exists) { // 将文档转换为UserData对象 var user = doc.ToObject<UserData>(); userList.Add(user); } } } catch (Exception ex) { Toast.MakeText(Application.Context, $"查询失败:{ex.Message}", ToastLength.Long).Show(); } return userList; }
示例2:条件查询(比如查询年龄大于18的用户)
public async Task<List<UserData>> GetUsersOver18() { var userList = new List<UserData>(); try { var firestoreDb = FirebaseFirestore.Instance; // 构建条件查询:Age > 18 var query = firestoreDb.Collection("Users").WhereGreaterThan("Age", 18); var querySnapshot = await query.GetAsync(); foreach (var doc in querySnapshot.Documents) { if (doc.Exists) { var user = doc.ToObject<UserData>(); userList.Add(user); } } } catch (Exception ex) { Toast.MakeText(Application.Context, $"查询失败:{ex.Message}", ToastLength.Long).Show(); } return userList; }
三、如果偏好SQL类数据库:免费替代方案Supabase
要是你更习惯SQL语法,推荐用Supabase——它基于PostgreSQL,有免费额度(500MB存储、每月2GB带宽),同样通过API操作数据,不会暴露SQL。简单思路:
- 注册Supabase账号,创建项目,获取API URL和公钥
- 安装
Supabase.NETNuGet包 - 初始化客户端并操作数据:
using Supabase; using System.Threading.Tasks; // 初始化Supabase客户端 var supabaseClient = new Client("你的Supabase API URL", "你的公钥"); await supabaseClient.InitializeAsync(); // 新增数据 var newUser = new { Name = "张三", Age = 25 }; await supabaseClient.From("users").Insert(newUser); // 查询所有用户 var users = await supabaseClient.From("users").Select("*").GetAsync();
四、关键注意事项
- 绝对不要在客户端直接连接数据库:不管是SQL还是NoSQL,直接暴露连接字符串/密钥会导致数据泄露,中间层(Firebase/Supabase的API)是必须的
- 免费额度足够新手项目:Firebase和Supabase的免费版完全能支撑个人学习阶段的开发需求,不用着急付费
- 后续记得锁权限:等功能跑通后,在控制台设置数据库的读写权限(比如只有认证用户才能操作),避免恶意访问
内容的提问来源于stack exchange,提问作者Alexandru M
相关产品推荐
相关产品推荐

