Как использовать значение объекта в другом классе в Kotlin и Microsoft Oauth 2.0 - PullRequest
0 голосов
/ 09 января 2020

Я хочу использовать объект ниже в другом классе:

private var mSingleAccountApp: ISingleAccountPublicClientApplication? = null

PublicClientApplication.createSingleAccountPublicClientApplication(
    this,
    R.raw.auth_config_single_account,
    object : IPublicClientApplication.ISingleAccountApplicationCreatedListener {
        override fun onCreated(application: ISingleAccountPublicClientApplication) {
            mSingleAccountApp = application
            // loadAccount()
        }

        override fun onError(exception: MsalException) {
            //txt_log.text = exception.toString()
        }
    }
)

Мне нужно вызвать метод ниже из другого класса

fun performOperationOnSignOut() {
    mSingleAccountApp!!.signOut(object : ISingleAccountPublicClientApplication.SignOutCallback {
        override fun onSignOut() {

        }

        override fun onError(exception: MsalException) {
            //displayError(exception)
        }
    })
}

Я пытался вызвать, но mSingleAccountApp всегда выбрасывает NullPointerException

Как передать или использовать переменную mSingleAccountApp в другом классе? ISingleAccountPublicClientApplication это интерфейс

Ответы [ 3 ]

0 голосов
/ 09 января 2020
class CustomClass(var listener: ListenerAppImp){
    private var mSingleAccountApp: ISingleAccountPublicClientApplication? = null


    PublicClientApplication.createSingleAccountPublicClientApplication(
    this,
    R.raw.auth_config_single_account,
    object : IPublicClientApplication.ISingleAccountApplicationCreatedListener {
        override fun onCreated(application: ISingleAccountPublicClientApplication) {
            mSingleAccountApp = application
            listener.getAppValue(mSingleAccountApp) // todo  mSingleAccountApp Value through interface
            // loadAccount()
        }

        override fun onError(exception: MsalException) {
            //txt_log.text = exception.toString()
        }
    }
    )

}

// todo for example

interface ListenerAppImp {
    fun getAppValue(mSingleAccountApp : ISingleAccountPublicClientApplication)
}

class User {
   var customClass = CustomClass(object : ListenerAppImp{
       override fun getAppValue(mSingleAccountApp: ISingleAccountPublicClientApplication) {

       }
   })
}

надеюсь, что это может помочь вам

0 голосов
/ 09 января 2020

В вашем случае просто реализуйте интерфейс ISingleAccountPublicClientApplication в другом классе для вашего понимания, давайте оставим имя класса Another

class Another : ISingleAccountPublicClientApplication {

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

   }

   override fun signOut(..yourcode...){
            .......yourcode.......
   }
}
0 голосов
/ 09 января 2020

Это самый простой пример, который я мог бы привести:

//class with one property
class Foo(val name : String){
}

class Bar(){
    constructor(foo: Foo) : this() {
        //access the property of the foo object
        println(foo.name)
    }
}

fun main() {
    val foo = Foo("John Doe")
    //pass foo-object in the constructor
    val bar = Bar(foo)
}

см. Также: https://kotlinlang.org/docs/reference/properties.html

...