简体   繁体   中英

How to get a variable from another class in kotlin?

I want to get a variable from an activity and use it in another class. This variable will be filled by an user in a editText that is called editTextSerie

 override fun searchSeries(listener: OnDataListener) {

        val retrofit = Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())
            .baseUrl("http://api.themoviedb.org/3/")
            .build()

        val client = retrofit.create(MovieDBApiInterface::class.java)

        val objetoClasse1 = SearchActivity()

        var nomeS = objetoClasse1.editTextSerie.text.toString().trim()


        val responseCall = client.searchSeries("API_KEY", "pt-BR", nomeS)

        responseCall.enqueue(object : Callback<AllSeriesResponse> {
            override fun onResponse(call: Call<AllSeriesResponse>?, response1: Response<AllSeriesResponse>?) {
                listener.onSuccess(response1!!.body()!!.results)
            }

            override fun onFailure(call: Call<AllSeriesResponse>?, t: Throwable?) {
                listener.onFailure(t!!.message.toString())
            }
        })
    }

This function "searchSeries" is from the class "Series".

I want to get the "editTextSerie" from another class called "Search Activity", so i created the variable "nomeS" to receive the value of it.

class SearchActivity : AppCompatActivity() {

    var botaoSearch: AppCompatImageButton? = null


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



        botaoSearch = findViewById(R.id.btn_search)

        botaoSearch?.setOnClickListener {


          var nomeSerie = editTextSerie.text.toString().trim()


        }
    }
}

I want to receive this value (value of editTextSerie comes from the XML of SearchActivity ) and use it at responseCall with the "nomeS" variable

What is OnDataListener ? Not really sure it is interface or abstract class, so I' ll write some pseudo code.

First change your function searchSeries 's params to

searchSeries(text: String, listener: OnDataListener)

So in the class Series , you can get the data in your function searchSeries :

    override fun searchSeries(text: String, listener: OnDataListener) {
    // ... 
    // you can get the "text" string
    }

Then edit your SearActivity 's listener:

    class SearchActivity : AppCompatActivity() {

        var botaoSearch: AppCompatImageButton? = null

        // create class "Series"
        val series = Series()

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

            botaoSearch = findViewById(R.id.btn_search)

            botaoSearch?.setOnClickListener {

                var nomeSeries = editTextSerie.text.toString().trim()
                searchSeries(nomeSeries)
            }
        }

        private fun searchSeries(text: String) {

            series.searchSeries(text, object : OnDataListener {

                override onSuccess(a0: ...) {

                }

                override onFailure(message: String) {

                }
            })

        }
    }

If OnDataListener is a abstract class:

    series.searchSeries(text, object : OnDataListener() {

        override onSuccess(a0: ...) {

        }

        override onFailure(message: String) {

        }
    })

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM