在Android Kotlin中使用Supabase
学习如何创建Supabase项目,向数据库添加示例数据,以及从Android Kotlin应用查询数据。
创建一个Supabase项目
前往 database.new 并创建一个新的Supabase项目。
当您的项目启动并运行后,前往 表编辑器,创建一个新表并插入一些数据。
或者,您可以在项目的 SQL编辑器 中运行以下代码片段。这将创建一个包含一些示例数据的 instruments 表。
12345678910111213-- 创建表create table instruments ( id bigint primary key generated always as identity, name text not null);-- 向表中插入一些示例数据insert into instruments (name)values ('violin'), ('viola'), ('cello');alter table instruments enable row level security;通过添加RLS策略,使表中的数据可公开读取:
1234create policy "public can read instruments"on public.instrumentsfor select to anonusing (true);使用Android Studio创建Android应用
打开Android Studio > 新建 > 新建Android项目
安装依赖项
打开build.gradle.kts(app)文件,添加序列化插件、Ktor客户端和Supabase客户端。
将版本占位符$kotlin_version替换为项目的Kotlin版本,$supabase_version和$ktor_version替换为各自的最新版本。
1234567891011plugins { ... kotlin("plugin.serialization") version "$kotlin_version"}...dependencies { ... implementation(platform("io.github.jan-tennert.supabase:bom:$supabase_version")) implementation("io.github.jan-tennert.supabase:postgrest-kt") implementation("io.ktor:ktor-client-android:$ktor_version")}添加网络访问权限
在AndroidManifest.xml文件的manifest标签下、application标签外添加以下行。
123...<uses-permission android:name="android.permission.INTERNET" />...初始化Supabase客户端
您可以在需要执行API调用时创建Supabase客户端。
为简化起见,我们将在MainActivity.kt文件的导入语句下方创建客户端。
将supabaseUrl和supabaseKey替换为您自己的:
Project URL
Anon key
123456789import ...val supabase = createSupabaseClient( supabaseUrl = "https://xyzcompany.supabase.co", supabaseKey = "your_public_anon_key" ) { install(Postgrest)}...创建乐器数据模型
创建一个可序列化的数据类来表示数据库中的数据。
在MainActivity.kt文件的createSupabaseClient函数下方添加以下内容。
12345@Serializabledata class Instrument( val id: Int, val name: String,)从应用查询数据
使用LaunchedEffect从数据库获取数据并在LazyColumn中显示。
用以下代码替换默认的MainActivity类。
注意我们正在从UI代码发起网络请求。在生产环境中,您应该使用ViewModel来分离UI和数据获取逻辑。
1234567891011121314151617181920212223242526272829303132333435363738class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { SupabaseTutorialTheme { // 使用主题中的'background'颜色的表面容器 Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { InstrumentsList() } } } }}@Composablefun InstrumentsList() { var instruments by remember { mutableStateOf<List<Instrument>>(listOf()) } LaunchedEffect(Unit) { withContext(Dispatchers.IO) { instruments = supabase.from("instruments") .select().decodeList<Instrument>() } } LazyColumn { items( instruments, key = { instrument -> instrument.id }, ) { instrument -> Text( instrument.name, modifier = Modifier.padding(8.dp), ) } }}启动应用
通过点击Android Studio中的运行应用按钮,在模拟器或物理设备上运行应用。