You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中无需Kotlin配置Room及使用问题求助

解决方案:Room购物车存储配置(纯Java/修复Kotlin配置)

一、纯Java项目的Room配置方案

无需引入Kotlin,直接按Java规范配置即可,步骤如下:

1. 配置Module级build.gradle

plugins {
    id 'com.android.application'
}

android {
    compileSdk 34 // 替换为你的项目compileSdk版本
    defaultConfig {
        applicationId "com.example.nourish"
        minSdk 21 // 替换为你的项目minSdk版本
        targetSdk 34
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    // Room核心依赖
    implementation "androidx.room:room-runtime:2.6.1"
    annotationProcessor "androidx.room:room-compiler:2.6.1"

    // 项目基础依赖
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.11.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

2. 修正实体类与Database结构

实体类CartItems.java

Dao接口不能嵌套在实体类内部,需单独拆分,同时优化字段类型与命名规范:

package com.example.nourish;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "cart_items") // 显式指定表名,避免类名大小写冲突
public class CartItems {
    @PrimaryKey(autoGenerate = true) // 购物车ID建议自增,避免手动赋值冲突
    public int uid;

    @ColumnInfo(name = "name")
    public String name;

    @ColumnInfo(name = "des")
    public String des;

    @ColumnInfo(name = "price")
    public String price;

    @ColumnInfo(name = "num_items") // 下划线命名符合数据库规范
    public int numItems; // 数量用int类型更合理,避免String转译问题
}

独立Dao接口CartDao.java

package com.example.nourish;

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;

import java.util.List;

@Dao
public interface CartDao {
    @Query("SELECT * FROM cart_items")
    List<CartItems> getAll();

    @Insert
    void insertAll(CartItems... items);

    @Delete
    void delete(CartItems item);
}

Database类CartDatabase.java

必须指定实体类与版本号:

package com.example.nourish;

import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(entities = {CartItems.class}, version = 1)
public abstract class CartDatabase extends RoomDatabase {
    public abstract CartDao cartDao();
}

3. 正确调用Room实例

Room默认禁止主线程执行数据库操作,测试阶段可临时开启,正式环境需用后台线程:

// 单例模式创建Database实例(避免重复初始化)
CartDatabase db = Room.databaseBuilder(getApplicationContext(),
        CartDatabase.class, "cart_database")
        .allowMainThreadQueries() // 测试用,正式版本移除
        .build();

// 后台线程执行查询
new Thread(() -> {
    CartDao cartDao = db.cartDao();
    List<CartItems> cartItems = cartDao.getAll();
    // 处理购物车数据
}).start();

二、修复Kotlin配置错误的方案

若需切换为Kotlin项目,解决Plugin [id: 'kotlin-android'] was not found错误:

1. 修正根目录Project级build.gradle

plugins {
    id 'com.android.application' version '8.2.2' apply false
    id 'com.android.library' version '8.2.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.20' apply false
}

2. 修正Module级build.gradle

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
}

android {
    compileSdk 34
    defaultConfig {
        applicationId "com.example.nourish"
        minSdk 21
        targetSdk 34
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    // Kotlin基础依赖
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20"
    // Room依赖
    implementation "androidx.room:room-runtime:2.6.1"
    kapt "androidx.room:room-compiler:2.6.1"

    // 项目基础依赖
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.11.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

3. 补充settings.gradle配置

确保包含必要仓库:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

内容的提问来源于stack exchange,提问作者Naeem Mujeeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:37:12