当前位置: 首页 > 知识库问答 >
问题:

无法导入AndroidX.DataStore.DataStore(尝试重新创建Google Codelab示例)

严正诚
2023-03-14

在app/src/main中创建一个名为proto的文件夹

在app/src/main/proto中创建和修改文件user_prefs.proto

构建->清理项目->重建项目

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id "com.google.protobuf" version "0.8.12"
}



android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 28
        targetSdkVersion 30
        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 {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    
    implementation  "androidx.datastore:datastore-core:1.0.0-alpha08"
    implementation  "com.google.protobuf:protobuf-javalite:3.11.0"

}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.10.0"
    }

    // Generates the java Protobuf-lite code for the Protobufs in this project. See
    // https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation
    // for more information.
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option 'lite'
                }
            }
        }
    }
}
syntax = "proto3";

option java_package = "com.example.test";
option java_multiple_files = true;

message UserPreferences {
  // filter for showing / hiding completed tasks
  bool show_completed = 1;
}
package com.example.test

import androidx.datastore.core.CorruptionException
import androidx.datastore.core.Serializer
import com.google.protobuf.InvalidProtocolBufferException
import java.io.InputStream
import java.io.OutputStream

object UserPreferencesSerializer : Serializer<UserPreferences> {
    override val defaultValue: UserPreferences = UserPreferences.getDefaultInstance()
    override suspend fun readFrom(input: InputStream): UserPreferences {
        try {
            return UserPreferences.parseFrom(input)
        } catch (exception: InvalidProtocolBufferException) {
            throw CorruptionException("Cannot read proto.", exception)
        }
    }

    override suspend fun writeTo(t: UserPreferences, output: OutputStream) = t.writeTo(output)
}
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.datastore.core.DataStore


private const val DATA_STORE_FILE_NAME = "user_prefs.pb"
private val Context.userPreferencesStore: DataStore<UserPreferences> by dataStore(
    fileName = DATA_STORE_FILE_NAME,
    serializer = UserPreferencesSerializer
)


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

共有1个答案

拓拔俊德
2023-03-14

我在做一个项目的时候也遇到过这个问题。

我发现我正在使用datastore-core,并且需要datastore-preferences。因此,我将依赖项声明从:

implementation 'androidx.datastore:datastore-core:1.0.0-alpha08'

致:

implementation 'androidx.datastore:datastore-preferences:1.0.0'
 类似资料:
  • 我试图第一次针对预先存在的数据库自动生成alembic修订版,但当我运行以下命令时 它生成一个迁移,尝试创建我数据库中的每个表和索引。类似于此: 然后,如果我尝试运行迁移,它会失败,因为对象已经存在: 所以在我看来,alembic认为我的数据库不包含任何表,但它确实包含。 知道为什么会这样吗?

  • 所以我今天遇到了一个奇怪的问题。我在IntelliJ中的一个模块有一些问题,所以我决定我应该试着把它关闭,然后从一个新的结账中重建它。我从Project窗口中删除了该模块,然后从我的文件系统中删除/重新下载了该模块。 我回到Intellij并尝试导入模块。它让我完成了选择选项的正常步骤,然后似乎成功了。只是它没有重新出现在我的项目窗口中。 我不确定我做了什么,但重新创建整个项目在这一点上不是一个选

  • 问题内容: 我的程序包含以下行,并且此时就挂起了,我不太确定为什么。 在Eclipse中进行调试时,如果我尝试在“显示”视图中评估“ new PoolingHttpClientConnectionManager()”,则会出现以下错误: 我正在使用org.apache.httpcomponents中的httpclient.jar版本4.3.1。 还有其他人遇到这个问题吗?有什么办法吗?还是我在做傻

  • 有人知道如何在解析服务器上从parse.com重新创建导入/导出吗? 或者甚至指出我做这件事的正确方向?

  • 我使用Guice进行依赖注入,但在我的特定用例中,它给了我这个错误:

  • 我正在尝试导入一个新的字体来实现它到我的p元素的css中。但是我导入的字体由于某种原因无法显示。这是我的代码: null null 你知道是什么导致了这个问题吗?