Development/Android

[Android - Kotlin] java.lang.IllegalStateException: TextView must not be null 오류

Jamie 2019. 7. 30. 22:23
반응형

포스팅 날짜 : 2019-07-30

Android Studio 버전 : 3.4.2

사용언어 : Kotlin

 

Android에서 Kotlin을 이용하여 개발하는중에 Activity1에서 Activity2로 데이터를 통신하는 부분을 구현하고 있었습니다.

Activity2에서 Intent를 이용하여 데이터를 수신한뒤에 TextView에 setText를 하는게 목적이었는데 제목과 같은 에러가 발생했습니다.

 

"java.lang.IllegalStateException: TextView must not be null"

 

Activity1에서는 Intent로 정상적으로 데이터를 송신했는데, Activity2에서 오류가 났습니다. 코드는 다음과 같습니다.

 

Activity1에서 버튼을 클릭하면 Intent로 String을 보내는 코드입니다.

class Activity1 : AppCompatActivity() {

	....// 생략

	override fun onStart() {
        super.onStart()
        // onButtonClick
        btn_start.setOnClickListener(View.OnClickListener{
            val intent = Intent(activity, Activity2::class.java).apply {
                putExtra("String", "Hello World")
            }
            startActivity(intent)
            Log.d(TAG, "onClick successful!")
        })
    }
}

Activity2에서는 다음과 같습니다.

class Activity2 : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if(intent.hasExtra("String")) {
            var received = intent.getStringExtra("String")
            if(received != null) {
                textview_presentation.text = received
            }
        } else {
            Toast.makeText(this, "전달된 Hello World가 없습니다.", Toast.LENGTH_SHORT).show()
        }
    }
}

 

알고 보니 아주 간단한 오류였습니다. Activity2의 onCreate()시에 setContentView가 없습니다.

 

Layout이 없는상태에서 Layout위의 TextView에 전달받은 String을 복사하려고하니 null이라고 판단하여 에러가 발생합니다.

 

class Activity2 : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

	setContentView(R.layout.activity_activity2)

        if(intent.hasExtra("String")) {
            var received = intent.getStringExtra("String")
            if(received != null) {
                textview_presentation.text = received
            }
        } else {
            Toast.makeText(this, "전달된 Hello World가 없습니다.", Toast.LENGTH_SHORT).show()
        }
    }
}

super.onCreate(savedInstanceState) 아래에 setContentView를 호출하여 문제를 해결했습니다.

 

  • stackoverflow를 찾아보니 TextView의 ID를 잘못 입력했을때도 발생한다고 하니 참고하시길 바랍니다.

참고 URL

반응형