Android в Kotlin: ошибка в привязке данных из проекта от Google codelabs - PullRequest
0 голосов
/ 14 июня 2019

Я проходил этот курс, предлагаемый Google, https://codelabs.developers.google.com/codelabs/kotlin-android-training-data-binding-basics/index.html?index=..%2F..android-kotlin-fundamentals#2,

Конкретный код в github: https://github.com/google-developer-training/android-kotlin-fundamentals-apps/tree/master/AboutMeDataBinding

Здесь я делал привязку данных, в которой шаг за шагом показано, как ее реализовать. Но в конце я получил ошибку с ActivityMainBinding

Я скачал код их решения с github, который при открытии Android-студии 3.4.1 у меня возникла та же проблема.

В основной деятельности.kt

  package com.example.android.aboutme
    import android.content.Context
     import android.os.Bundle
     import android.view.View
   import android.view.inputmethod.InputMethodManager
  import androidx.appcompat.app.AppCompatActivity 
   import androidx.databinding.DataBindingUtil
   import com.example.android.aboutme.databinding.ActivityMainBinding

 class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

private val myName: MyName = MyName("Aleks Haecky")

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, 
R.layout.activity_main)

    binding.myName = myName

    binding.doneButton.setOnClickListener {
        addNickname(it)
    }

}


 private fun addNickname(view: View) {
    binding. apply {
        myName?.nickname = nicknameEdit.text.toString()
        invalidateAll()
        nicknameEdit.visibility = View.GONE
        doneButton.visibility = View.GONE
        nicknameText.visibility = View.VISIBLE
    }

    // Hide the keyboard.
    val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}

build.gradle (модуль: приложение)

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.android.aboutme"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    testImplementation 'junit:junit:4.12'
}

Я ожидал, что все будет в порядке, но ActivityMainBinding был красного цвета. Ошибка говорит о неразрешенной ссылке.

IDE Fatal Error:
java.lang.NullPointerException
    at com.intellij.build.MultipleBuildsView.lambda$onEvent$2(MultipleBuildsView.java:218)
    at com.intellij.build.MultipleBuildsView.lambda$onEvent$4(MultipleBuildsView.java:310)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:435)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:419)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:403)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
    at java.awt.EventQueue.access$500(EventQueue.java:98)
    at java.awt.EventQueue$3.run(EventQueue.java:715)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:755)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:704)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:391)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Unresolved reference: ActivityMainBinding
Unresolved reference: ActivityMainBinding
Unresolved reference: it
Unresolved reference: nicknameEdit
Unresolved reference: invalidateAll
Unresolved reference: nicknameEdit
Unresolved reference: doneButton
Unresolved reference: nicknameText

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Я получил этот ответ пробным методом.Нам нужно просто очистить проект с последующей перестройкой.Для этого мы можем просто пропустить (или удалить) импорт, который показан серым (то есть он не нужен в проекте).Затем Build->Clean Project и после этого Build->Rebuild Project.

0 голосов
/ 15 июня 2019

Включая ответ @Chandramauli Chakraborty, я также думаю, что у вас может быть другая ошибка в вашем коде или где-нибудь в любом файле Kotlin или XML. ПОЖАЛУЙСТА, убедитесь, что вы все исправили правильно, и они пытаются сделать то, что говорит колледж.

...