在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中的运行应用
按钮,在模拟器或物理设备上运行应用。