>

모든 파일에서이 함수에 액세스 할 수 있도록하려고하지만 Kotlin 파일에서 클래스 외부에서 정의하면 getSharedPreferences 에 대한 오류가 표시됩니다.   unresolved reference 로 . 내 응답 인 것 같지만 모르겠습니다. 최상위 함수를 선언하는 방법. 어떻게 할 수 있습니까?

package com.example.app
    fun retrieveData() {
        val mypref = getSharedPreferences ("mypref", Context.MODE_PRIVATE)
        val radiotext=mypref.getString("data","")
    }


  • 답변 # 1

    최상위 함수 선언은 괄호 안에 넣지 않는 것만 큼 간단합니다 { }  클래스 선언.

    SharedPreferences는 Android 컨텍스트에서만 검색 할 수 있습니다. 함수를 컨텍스트의 확장으로 만드십시오 :

    fun Context.retrieveData() { //...
    
    
    그런 다음 액티비티 내부의 일부 함수에서 호출하는 등 모든 컨텍스트 유형 객체 내에서 사용할 수 있습니다. Fragment (컨텍스트 객체가 아님)에서 호출하는 경우 컨텍스트에서 호출해야합니다. context.retrieveData() .

    확장 함수로 만드는 것은 호출 방식을 재정렬하는 방법 일뿐입니다. 컨텍스트 인수를 사용하도록 함수를 정의 할 수도 있습니다.

    fun retrieveData(context: Context) {
        val mypref = context.getSharedPreferences("mypref", Context.MODE_PRIVATE)
        val radiotext=mypref.getString("data","")
    }
    
    
    이 경우 항상 컨텍스트를 전달해야합니다. 활동중인 경우 this 를 전달할 수 있습니다.  또는 context 를 통과 , 이는 활동의 속성입니다.

  • 답변 # 2

    두 가지 옵션이 있습니다 :

    <올>

    SharedPreferences에서 사용할 함수를 매개 변수로 변경 :

    package com.example.app
        fun retrieveData(shPref: SharedPreferences): String {
            val radioText = shPref.getString("data", "")
            return radioText
        }
    
    

    SharedPreferences 객체의 확장이되도록 함수를 변경하면 SharedPreferences를 매개 변수로 사용합니다.

    package com.example.app
        fun SharedPreferences.retrieveData(): String {
            val radioText = this.getString("data", "")
            return radioText
        }
    
    

    이 기능을 사용하려면 반드시 SharedPreference 객체를 미리 가져와야합니다.

관련 자료

  • 이전 c++ - 두 정수 사이의 최대 값을 찾는 재귀 함수
  • 다음 ruby - 거래 API에서 Ebay Australia 사이트 ID가 유효하지 않음 (수정 된 EbayR)