快速开始

在Android Kotlin中使用Supabase

学习如何创建Supabase项目,向数据库添加示例数据,以及从Android Kotlin应用查询数据。


1

创建一个Supabase项目

前往 database.new 并创建一个新的Supabase项目。

当您的项目启动并运行后,前往 表编辑器,创建一个新表并插入一些数据。

或者,您可以在项目的 SQL编辑器 中运行以下代码片段。这将创建一个包含一些示例数据的 instruments 表。

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 创建表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策略,使表中的数据可公开读取:

1
2
3
4
create policy "public can read instruments"on public.instrumentsfor select to anonusing (true);
2

使用Android Studio创建Android应用

打开Android Studio > 新建 > 新建Android项目

3

安装依赖项

打开build.gradle.kts(app)文件,添加序列化插件、Ktor客户端和Supabase客户端。

将版本占位符$kotlin_version替换为项目的Kotlin版本,$supabase_version$ktor_version替换为各自的最新版本。

最新supabase-kt版本可在此处查看,Ktor版本可在此处查看。

1
2
3
4
5
6
7
8
9
10
11
plugins { ... 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")}
4

添加网络访问权限

AndroidManifest.xml文件的manifest标签下、application标签外添加以下行。

1
2
3
...<uses-permission android:name="android.permission.INTERNET" />...
5

初始化Supabase客户端

您可以在需要执行API调用时创建Supabase客户端。

为简化起见,我们将在MainActivity.kt文件的导入语句下方创建客户端。

supabaseUrlsupabaseKey替换为您自己的:

Project URL
Anon key
1
2
3
4
5
6
7
8
9
import ...val supabase = createSupabaseClient( supabaseUrl = "https://xyzcompany.supabase.co", supabaseKey = "your_public_anon_key" ) { install(Postgrest)}...
6

创建乐器数据模型

创建一个可序列化的数据类来表示数据库中的数据。

MainActivity.kt文件的createSupabaseClient函数下方添加以下内容。

1
2
3
4
5
@Serializabledata class Instrument( val id: Int, val name: String,)
7

从应用查询数据

使用LaunchedEffect从数据库获取数据并在LazyColumn中显示。

用以下代码替换默认的MainActivity类。

注意我们正在从UI代码发起网络请求。在生产环境中,您应该使用ViewModel来分离UI和数据获取逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class 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), ) } }}
8

启动应用

通过点击Android Studio中的运行应用按钮,在模拟器或物理设备上运行应用。