Инициализация Firebase в проекте Modulair Android, написанном на kotlin, дает неинициализированную ошибку - PullRequest
0 голосов
/ 12 мая 2018

Я испытываю затруднения при попытке реализовать firebase в проекте modulair android, написанном на kotlin.

Моя структура выглядит следующим образом:

  • Приложение
    • Функция
    • База

А затем в своей основной деятельности по созданию я вызываю FirebaseApp.inialize (this)

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  FirebaseApp.initializeApp(this)
  setContentView(R.layout.activity_main)
  spotifyAuthDataViewModel = ViewModelProviders.of(this)
    .get(SpotifyAuthDataViewModel::class.java)

  val liveData = spotifyAuthDataViewModel.getAuthData()
  info { liveData.value!!.spotifyToken }
}

Моя модель представления с liveata выглядит так:

    class SpotifyAuthDataViewModel : ViewModel() {
  var authData: MutableLiveData<SpotifyAuthData> = MutableLiveData()
  private var mDatabase: DatabaseReference? = null

  fun getAuthData(): LiveData<SpotifyAuthData> {
    mDatabase = FirebaseDatabase.getInstance().reference
    FirebaseDatabase.getInstance()
          .getReference("/spotify_data")
          .addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onCancelled(p0: DatabaseError?) {
            }

            override fun onDataChange(dataSnapshot: DataSnapshot) {
              if (dataSnapshot.exists()) {
                var spotifyAuthData: SpotifyAuthData? =
                  dataSnapshot.getValue<SpotifyAuthData>(SpotifyAuthData::class.java)
                authData.postValue(spotifyAuthData)
              }
            }
          }
          )

    return authData

  }
}

Но когда я пытаюсьЗапустите приложение, я получаю это сообщение

  java.lang.RuntimeException: Unable to resume activity {com.jd.test.app/com.jd.test.feature.MainActivity}: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.jd.test.app. Make sure to call FirebaseApp.initializeApp(Context) first.

Я также пытался создать класс, расширяющий мое приложение и вызывающий firebaseapp.initialize (this) и добавив его в мой манифест, но я все еще получаю ту же ошибку.

Манифест:

 <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.jd.test.feature">
      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <application android:name=".BaseApplication">
    <activity android:name=".MainActivity"
        android:theme="@style/AppTheme">
      <intent-filter android:order="1">
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT"/>

        <data
            android:host=""
            android:pathPrefix="/.*"
            android:scheme="https"/>
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
    <activity android:name=".spotify.views.SpotifyLogin"/>
  </application>


</manifest>

BaseApplication.kt:

class BaseApplication : Application() {
  override fun onCreate() {
    super.onCreate()
    FirebaseApp.initializeApp(this)
  }
}

Моя функция gradle

    apply plugin: 'com.android.feature'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
  compileSdkVersion 27
  defaultConfig {
    minSdkVersion 23
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  }
  buildTypes {
    debug {
      useProguard false
      minifyEnabled false
    }
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
}

repositories {
  flatDir {
    dirs 'libs'
  }
}

dependencies {
  def lifecycle_version = "1.1.0"

  implementation fileTree(dir: 'libs', include: ['*.jar'])
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
  implementation 'io.github.tonnyl:spark:0.1.0-alpha'
  implementation 'com.github.Joran-Dob:PlayPauseFab:0.0.3'
  implementation project(':base')
  implementation 'com.android.support:cardview-v7:27.1.1'
  implementation 'com.android.support:recyclerview-v7:27.1.1'
  implementation 'com.github.bumptech.glide:glide:4.4.0'
  implementation "com.squareup.retrofit2:retrofit:2.3.0"
  implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
  implementation "com.squareup.retrofit2:converter-gson:2.3.0"
  implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
  implementation "io.reactivex.rxjava2:rxandroid:2.0.1"
  implementation 'com.spotify.android:auth:1.1.0'
  implementation 'com.spotify.sdk:spotify-player-24-noconnect-2.20b@aar'
  implementation "org.jetbrains.anko:anko:0.10.5"
  implementation 'com.android.support:palette-v7:27.1.1'
  implementation 'com.android.support:appcompat-v7:27.1.1'
  implementation 'com.android.support.constraint:constraint-layout:1.1.0'
  implementation 'com.google.firebase:firebase-core:15.0.2'
  implementation 'com.google.firebase:firebase-database:15.0.1'
  implementation "android.arch.lifecycle:extensions:$lifecycle_version"
  implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // use -ktx for Kotlin
  implementation "android.arch.lifecycle:livedata:$lifecycle_version"
  kapt "android.arch.lifecycle:compiler:$lifecycle_version"
  kapt 'com.github.bumptech.glide:compiler:4.4.0'
  testImplementation 'junit:junit:4.12'
  androidTestImplementation 'com.android.support.test:runner:1.0.2'
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Если вы используете функции (apply plugin: 'com.android.feature' ), тогда apply plugin: 'com.google.gms.google-services' и SDK (api 'com.google.firebase. ~~~~~~) необходимо добавить в файл градации baseFeature.

Вы также должны добавить google-services.json в эту папку модулей!

0 голосов
/ 12 мая 2018

Плагин com.google.gms.google-services Gradle работает только с модулями, являющимися модулями приложений Android, которые применяют плагин com.android.application. Он не работает с библиотечными или функциональными модулями.

Когда вы применяете плагин google-services, он вносит изменения в ваше приложение, которые позволяют ему автоматически инициализироваться, используя информацию, содержащуюся в вашем файле google-services.json.

...