Kotlin で Jetpack Compose, Retrofit を使って API リクエスト、JSON パース して、グリッド表示するコードをファイル別に表示して

Kotlin で Jetpack Compose と Retrofit を使って API リクエスト、JSON パースして、グリッド表示するためには、以下のようにファイルを分けることができます。

 

1. API リクエストを行うための Retrofit インターフェースを定義するファイル


interface ApiService {

    @GET("/photos")
    suspend fun getPhotos(): List<Photo>
}

 

2. API レスポンスを表すデータクラスを定義するファイル


data class Photo(
    val id: Int,
    val title: String,
    val url: String
)

 

3. API レスポンスをパースして、表示するための画面を定義するファイル


@Composable
fun PhotoGrid() {
    val photos by remember { mutableStateOf<List<Photo>>(emptyList()) }

    LaunchedEffect(Unit) {
        val apiService = Retrofit.Builder()
            .baseUrl("https://jsonplaceholder.typicode.com")
            .addConverterFactory(Json {
                ignoreUnknownKeys = true
            }.asConverterFactory("application/json".toMediaType()))
            .build()
            .create(ApiService::class.java)

        photos = apiService.getPhotos()
    }

    LazyVerticalGrid(cells = GridCells.Adaptive(minSize = 128.dp)) {
        items(photos) { photo ->
            Card(
                modifier = Modifier.padding(4.dp),
                shape = RoundedCornerShape(8.dp),
                elevation = 4.dp
            ) {
                Column(
                    Modifier
                        .fillMaxWidth()
                        .height(128.dp)
                        .padding(8.dp)
                ) {
                    Text(
                        text = photo.title,
                        style = MaterialTheme.typography.subtitle1,
                        maxLines = 2,
                        overflow = TextOverflow.Ellipsis
                    )
                    Spacer(modifier = Modifier.weight(1f))
                    CoilImage(
                        data = photo.url,
                        contentScale = ContentScale.Crop,
                        modifier = Modifier.fillMaxSize()
                    )
                }
            }
        }
    }
}

 

4. 上記の画面を表示するための Activity もしくは Fragment を定義するファイル


class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            PhotoGrid()
        }
    }
}

以上のように、ファイルを分けることで、API リクエストやパース、表示を分離し、コードを見やすく、メンテナンスしやすくすることができます。

 

■ 感想

ただ、一行問いかけただけ。

ChatGPT で、ここまで書けるとは。



【Chrome】ChatGPT エクステンション で表示できない画面がある

なんか最近真っ白で表示されない画面が多いのですが。

例えばこの画面。

ChatGPT for Search Engines

👉 Twitterの2要素認証(2FA)を使用する方法 hatena-bookmark

Chrome の incognito window や Safari では、正常に表示されます。

incognito window chrome

何なんでしょうか。

 

■ ChatGPT for Search Engines を OFF にすると表示された。

状況からして、Chrome のエクステンションのどれか、です。

調べた結果これでした。

ChatGPT for Search Engines

👉 ChatGPT for Search Engines - Chrome Web Store hatena-bookmark

Chrome の設定から、ChatGPT for Search Engines を OFF にすると表示されます。

ChatGPT for Search Engines

OpenAI 公式のエクステンションなのですが、どうかして欲しいです!

👉 ChatGPT for Search Engines hatena-bookmark


【iPhone】勝手な「使ってないアプリをアンインストールする」機能を無効化する方法

👉 あまり使わない決済アプリが勝手にアンインストールされていた - ケータイ Watch hatena-bookmark

勝手にアンインストールされると、イラッとする人向け。

そこまで自動にしたくない。


設定

 ↓

App Store

 ↓

非使用のAppを取り除く → OFF

あまり使わない決済アプリが勝手にアンインストールされていた

スマホのおせっかいは本当にうざいです。

👉 Android で使用していないアプリを削除、無効化、管理する - Android ヘルプ hatena-bookmark


プログラミング でも UI でも 等幅フォント「Martian Mono」はいい感じ。

Martian Monoは、Martian Grotesk(myfonts.com)の等幅バージョンで、Groteskのすべての利点を継承しつつ、コード用とデザイン用に制作されたフォントです。

ライセンスはSIL Open Font License 1.1で、商用プロジェクトでも無料で使用できます。

👉 プログラミング用フォントとUIデザインのどちらにも使える! 美しさと読みやすさを兼ね備えたフォント「Martian Mono」 | コリス hatena-bookmark

良さげなので、IDEA/AndroidStudio に適用してみましたが、エディター内コードのテキスト、IDE の UI のテキスト、両方共にすごくいいです!

プログラミング でも UI でも フォント「Martian Mono」はいい感じ。

プログラミング でも UI でも フォント「Martian Mono」はいい感じ。

きれいでくっきりと分かりやすいフォントです。

私の場合はあまり目が良くないので、すべてのテキストサイズは 14 に統一しています。

プログラミング でも UI でも フォント「Martian Mono」はいい感じ。

プログラミング でも UI でも フォント「Martian Mono」はいい感じ。

プログラミング でも UI でも フォント「Martian Mono」はいい感じ。

プログラミング でも UI でも フォント「Martian Mono」はいい感じ。

プログラミング でも UI でも フォント「Martian Mono」はいい感じ。

プログラミング でも UI でも フォント「Martian Mono」はいい感じ。

多少、目が悪くても、光の当たり方が悪くても、すごく見やすくて分かりやすいです。

おすすめです。

ちなみに、上の画像は、最も標準的な Std Rg otf を入れたものです。

👉 evilmartians/mono: Free and open-source monospaced font from Evil Martians hatena-bookmark


【Android Studio】Giraffe や Flamingo の New UI がシンプルで素晴らしい件

いまどきのインターネットやパソコンやアプリが複雑でややこしすぎるのは皆が感じていることです。

「人間工学に基づき」とかいいながらややこしいだけのUIから、JetBrains は先を見越してシンプルなUIに向かっています。

👉 New UI | IntelliJ IDEA Documentation hatena-bookmark

それに合わせて Android Studio もシンプルで直感的なUI方面へ。


👉 Alexis C. GRIDEL's Blog - How to enable the new UI in Jetbrains products hatena-bookmark

ついでに、デフォルトテーマもコントラストを強くした「Dark」テーマは見やすくなっています。

Idea Intellij Ultimate。


IntelliJ IDEA 2022.3.2 (Ultimate Edition)
Build #IU-223.8617.56, built on January 26, 2023
Subscription is active until January 14, 2024.
Runtime version: 17.0.5+1-b653.25 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

Android Studio Flamingo。


Android Studio Flamingo | 2022.2.1 Beta 1
Build #AI-222.4459.24.2221.9471578, built on January 10, 2023
Runtime version: 17.0.4.1+0-17.0.4.1b469.62-9127311 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

【Android Studio】Giraffe や Flamingo の New UI がシンプルで素晴らしい件

Android Studio Giraffe。


Android Studio Giraffe | 2022.3.1 Canary 2
Build #AI-223.7571.182.2231.9523943, built on January 25, 2023
Runtime version: 17.0.5+0-17.0.5b653.25-9484017 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

Android Studio Giraffe | 2022.3.1 Canary 2

👉 New UI | IntelliJ IDEA Documentation hatena-bookmark

これ、次期、Android Studio Flamingo Stable に適用は、もしかして、まさか1年後とかなの?


👉 Android Studio Flamingo 隠された新デザイン「New UI」を有効化する2つの方法 🐦 hatena-bookmark
👉 【Android Studio Flamingo】dependencies をバージョンアップデートするときに確認するべき3つの相性 hatena-bookmark