Android Studio教程应用程序崩溃

Android Studio教程应用程序崩溃,android,kotlin,Android,Kotlin,我知道这个问题,但由于我的Android Studio示例教程应用程序是使用比API年轻3年的API编译的,并且错误看起来有不同的原因,所以我认为有足够的理由重新提问 我一直在密切关注Android SDK指南构建您的第一个应用程序,我用Kotlin而不是Java来完成这一切。我也不同于建议的兼容性级别(我使用的是Android 7.0 API 24)。应用程序编译正常(只有1条关于NDK缺少“平台”目录的警告)。无论我是在Android 7.0 API 24的Galaxy S6上运行它,还是在

我知道这个问题,但由于我的Android Studio示例教程应用程序是使用比API年轻3年的API编译的,并且错误看起来有不同的原因,所以我认为有足够的理由重新提问

我一直在密切关注Android SDK指南构建您的第一个应用程序,我用Kotlin而不是Java来完成这一切。我也不同于建议的兼容性级别(我使用的是Android 7.0 API 24)。应用程序编译正常(只有1条关于NDK缺少“平台”目录的警告)。无论我是在Android 7.0 API 24的Galaxy S6上运行它,还是在API 27的虚拟Nexus 5X上运行它,该应用程序在显示消息时会崩溃

有两个活动:主活动有一个EditText(包含一些文本字段)和一个按钮,该按钮将文本作为额外消息发送给第二个活动,该活动应显示文本

主要活动的代码:

package com.altran.tutorialapp

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.EditText

const val TUTORIAL_EXTRA_MESSAGE = "com.altran.tutorialapp.MESSAGE"

class MainActivity : AppCompatActivity() {

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

    //** Called when the user taps the send button */
    fun sendMessage(view: View) {
        val writtenTextView = findViewById<EditText>(R.id.editText)
        val message = writtenTextView.text.toString()
        val intent = Intent(this, DisplayMessageActivity::class.java).apply {
            putExtra(TUTORIAL_EXTRA_MESSAGE, message)
        }
        startActivity(intent)
    }
}
package com.altran.tutorialapp

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView


class DisplayMessageActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_display_message)
    }

    // Get the intent that started this activity and extract the string
    val message = intent.getStringExtra(TUTORIAL_EXTRA_MESSAGE)

    // Capture this layout's TextView and set its string to the string of the EXTRA
    val textView = findViewById<TextView>(R.id.textView).apply {
        text = message
    }
}
Android Studio显示了以下提示:

声明具有从平台调用推断的类型,这可能导致 未检查的可空性问题。将类型显式指定为可为null或 不可为空。此检查报告功能和功能 具有平台类型的属性。为了防止意外 如果出现错误,则应显式声明类型

当我把这行改写成

private val message: String = intent.getStringExtra(TUTORIAL_EXTRA_MESSAGE)

。。。同样的错误也会发生。我还能做什么?这是我的第一个应用程序和第一个Kotlin代码,所以请温柔一点。

像这样试试。在创建活动之前,您正在调用intent。如果有帮助,请告诉我。还可以看看这里,您可以使用kotlin视图绑定而不是findViewById

class DisplayMessageActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_display_message)
        //Get the intent that started this activity and extract the string
        val message = intent.getStringExtra(TUTORIAL_EXTRA_MESSAGE)

        // Capture this layout's TextView and set its string to the string of the EXTRA
        val textView = findViewById<TextView>(R.id.textView)
        textView.text = message

    }


}
class DisplayMessageActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u display\u消息)
//获取启动此活动的意图并提取字符串
val message=intent.getStringExtra(教程额外消息)
//捕获此布局的TextView并将其字符串设置为额外的
val textView=findViewById(R.id.textView)
textView.text=消息
}
}

像这样试试。在创建活动之前,您正在调用intent。如果有帮助,请告诉我。还可以看看这里,您可以使用kotlin视图绑定而不是findViewById

class DisplayMessageActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_display_message)
        //Get the intent that started this activity and extract the string
        val message = intent.getStringExtra(TUTORIAL_EXTRA_MESSAGE)

        // Capture this layout's TextView and set its string to the string of the EXTRA
        val textView = findViewById<TextView>(R.id.textView)
        textView.text = message

    }


}
class DisplayMessageActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u display\u消息)
//获取启动此活动的意图并提取字符串
val message=intent.getStringExtra(教程额外消息)
//捕获此布局的TextView并将其字符串设置为额外的
val textView=findViewById(R.id.textView)
textView.text=消息
}
}

是的,谢谢,这确实有效。我只是没有注意到这两个变量必须在onCreate域中赋值。我错了。很高兴听到这有帮助。是的,谢谢你,这确实奏效了。我只是没有注意到这两个变量必须在onCreate域中赋值。我错了。很高兴听到这有帮助。
class DisplayMessageActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_display_message)
        //Get the intent that started this activity and extract the string
        val message = intent.getStringExtra(TUTORIAL_EXTRA_MESSAGE)

        // Capture this layout's TextView and set its string to the string of the EXTRA
        val textView = findViewById<TextView>(R.id.textView)
        textView.text = message

    }


}