无法识别符号c882c94be45fff9d16a1cf845fc16ec5

8
我是一名新开发人员,正在探索Android世界。我目前正在学习Udacity创建Sunshine应用程序的教程。在片段活动类中,为了从openweathermap获取数据,我必须将我的帐户获得的API密钥添加到生成的URL的末尾。在片段活动中调用了BuildConfig.java(单击以查看String apiKey的第6行作为其一部分的BuildConfig.java的调用)。
build.gradle文件如下:
apply plugin: 'com.android.application'
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    defaultConfig {
        applicationId "com.example.android.sunshine.app"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

    }
    buildTypes.each {
        it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', 'c882c94be45fff9d16a1cf845fc16ec5'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.1.0'
}

在buildTypes.each中,使用'String','OPEN_WEATHER_MAP_API_KEY','c882c94be45fff9d16a1cf845fc16ec5'调用buildConfigField函数,结果为:

public static final String OPEN_WEATHER_MAP_API_KEY = c882c94be45fff9d16a1cf845fc16ec5;

在BuildConfig.java中生成的代码,但我一直收到以下错误: 无法解析符号(点击查看错误消息和BuildConfig.java文件) 我不明白为什么字符串OPEN_WEATHER_MAP_API_KEY会自动创建为一组没有引号的字母和数字,但如果我编辑代码以如下方式阅读:

public static final String OPEN_WEATHER_MAP_API_KEY = "c882c94be45fff9d16a1cf845fc16ec5";

或者
public static final String OPEN_WEATHER_MAP_API_KEY = 'c882c94be45fff9d16a1cf845fc16ec5';

BuildConfig.java会自动更改自己。

我不确定我做错了什么,我查看了许多Udacity的视频,但没有任何关于这个问题的信息。如果您知道如何解决,请告诉我。

谢谢。


3
如果您还没有这样做的话,您可能需要在Open Weather Maps上生成一个新的API密钥,因为任何人都可以在他们的应用程序中使用您的密钥。 - sornars
2
@sornars,非常好的观察。对于所有人来说,在输入私人和机密信息时,例如此案例中的API密钥所有者,请始终输入虚拟值。 - Chand51
不用担心,我已经更改了我的 API 密钥。 - Kevin Rajan
2个回答

21
 buildTypes.each {
     it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', 'c882c94be45fff9d16a1cf845fc16ec5'
 }

 buildTypes.each {
     it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', "\"c882c94be45fff9d16a1cf845fc16ec5\""
 }

这样 OPEN_WEATHER_MAP_API_KEY 就应该被正确转义


1
你能解释一下为什么需要这样格式化吗? - The Cog
2
@thecog的原因是Gradle的buildConfigField和Java的字符串都必须被包含在一对""中。 - Blackbelt
2
我注意到,"'appid'"同样有效(单双双单引号)。 - The Cog
1
AppId没有出现在BuildConfig.java文件中。 - Blackbelt
1
应该吗?对我来说,OPEN_WEATHER_MAP_API_KEY变量出现在BuildConfig.java中(其值在build.gradle中定义)。 - The Cog
1
不可以。只有你明确声明的 buildConfigField 和“默认”值才会出现在其中。 - Blackbelt

3
    "\"c882c94be45fff9d16a1cf845fc16ec5\""

这是对BuildTypes容器进行更改的正确语法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接