2015-10-27 3 views
8

Я - новый разработчик, изучающий мир Android. В настоящее время я работаю над учебниками Udacity для создания приложения Sunshine. В классе активности фрагмента для получения данных из openweathermap я должен добавить ключ API, полученный из моей учетной записи, до конца сгенерированного URL. Существует вызов BuildConfig.java в Fragment activity (щелкните, чтобы увидеть вызов BuildConfig.java, который находится на 6-й строке как часть String apiKey).Не удается разрешить символ c882c94be45fff9d16a1cf845fc16ec5

Файл 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 it.buildConfigField вызывается с 'String', 'OPEN_WEATHER_MAP_API_KEY', 'c882c94be45fff9d16a1cf845fc16ec5', в результате чего

public static final String OPEN_WEATHER_MAP_API_KEY = c882c94be45fff9d16a1cf845fc16ec5; 

генерируется в BuildConfig.java, однако я продолжаю получать эту ошибку: Cannot Resolve Symbol (щелкните, чтобы увидеть сообщение об ошибке и файл BuildConfig.java) Я не понимаю, почему String 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

Возможно, вы захотите создать новый ключ API в Open Weather Maps, если вы этого еще не сделали, поскольку любой может использовать ваш ключ в своем приложении. – sornars

+2

@sornars, очень хорошее наблюдение. В общем, при размещении частной и конфиденциальной информации, такой как API-интерфейс владельца в этом случае, всегда ставится фиктивное значение. – Chand51

+0

не беспокойтесь, я изменил свой ключ API –

ответ

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

Можете ли вы объяснить, почему его нужно отформатировать следующим образом? –

+2

@thecog причина в том, что buildgonfigField обоих gradle и строки Java должны быть заключены в пару «» – Blackbelt

+2

Я заметил, что «appid» работает также (одиночный двойной двойной сингл). –

3
"\"c882c94be45fff9d16a1cf845fc16ec5\"" 

Это правильный синтаксис для внесения изменений в контейнер BuildTypes.