Android 如何将我在非类位置编写的变量调用到另一个类?

Android 如何将我在非类位置编写的变量调用到另一个类?,android,google-maps,kotlin,weather-api,Android,Google Maps,Kotlin,Weather Api,1.此处的“address”变量为我提供了一个带有坐标的城市名称。我想在改造中写入此地址,而不是伊斯坦布尔,这样它可以在地图上自动显示所选位置的天气。(谷歌地图) private const val TAG=“MapViewFragment” 类MapViewFragment:Fragment(),OnMapReadyCallback{ 伴星{ 私有lateinit变量nMap:GoogleMap 变量地址:String=“” var测试:String=“” var test2:String=“

1.此处的“address”变量为我提供了一个带有坐标的城市名称。我想在改造中写入此地址,而不是伊斯坦布尔,这样它可以在地图上自动显示所选位置的天气。(谷歌地图)

private const val TAG=“MapViewFragment”
类MapViewFragment:Fragment(),OnMapReadyCallback{
伴星{
私有lateinit变量nMap:GoogleMap
变量地址:String=“”
var测试:String=“”
var test2:String=“”
var cacik:String=“adana”
私有变量标记:MutableList=mutableListOf()
}
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
map_view.onCreate(savedInstanceState)
map_view.onResume()
map\u view.getMapAsync(此)
setToolbar()
}
在mapready上覆盖乐趣(地图:谷歌地图?){
if(map!=null){
nMap=map
}
地图?让我看看{
nMap=它
nMap.setOnInfoWindowClickListener{markerToDelete->
Log.i(标记“onWindowsClickListener-删除此标记”)
标记。删除(标记删除)
markerToDelete.remove()
}
nMap.setOnMapLongClickListener{latlng->
Log.i(标记“onMapLongClickListener”+latlng)
Toast.makeText(
requireContext(),
“这是祝酒词”+latlng,
吐司长度
).show()
showAlertDialog(latlng)
address=getAddress(纬度、经度)
测试=获取地址(37.000000,35.321335)
test2=“伊斯坦布尔”
Log.d(标记“test5$address${latlng.latitude}${latlng.longitude}”)
Toast.makeText(requireContext(),“test”+地址,Toast.LENGTH\u LONG.show())
}
}
}
private-fun-getAddress(lat:Double,lng:Double):字符串{
val geocoder=geocoder(requireContext())
val list=地理编码器。getFromLocation(纬度、液化天然气、1)
返回列表[0]。getAddressLine(0)
//val stateName:String=地址[0]。getAddressLine(1)
}
私人娱乐showAlertDialog(latlng:latlng){
val对话框=
AlertDialog.Builder(requireContext())
.setTitle(“创建标记”).setMessage(“添加标记…”)
.setNegativeButton(“取消”,null)
.setPositiveButton(“确定”,空)
.show()
dialog.getButton(DialogInterface.BUTTON_正值).setOnClickListener{
val marker=nMap.addMarker(
MarkerOptions().position(latlng.title(“我的新标记”).snippet(
“很酷的片段”
)
)
标记。添加(标记)
dialog.discover()的
}
dialog.getButton(DialogInterface.BUTTON_负值).setOnClickListener{
dialog.discover()的
}
}
覆盖创建视图(
充气机,
容器:视图组?,
savedInstanceState:捆绑?
):查看{
返回充气器。充气(R.layout.mapviewfragment,容器,错误)
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
}
私人娱乐设置工具栏(){
val actionBar:actionBar?=(作为MainActivity的requireAction()).supportActionBar
actionBar?应用{
title=getString(R.string.kartensicht)
setDisplayShowTitleEnabled(真)
setHomeButtonEnabled(真)
}
}
}
3.我只想在改装响应中调用“address”。我想在另一个类中调用address并编写Istanbul的位置。getter和setter方法不起作用,因为我没有在类中编写它们。如何在另一个类中使用该地址

private const val TAG = "Retrofit Connection"


fun main(){
    retrofitResponse()

}

object RetrofitSetup {

    //var test = MapViewFragment.address
    var urlAll = "api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}"
    var url = "https://api.openweathermap.org/data/2.5/"
    val apiKey = "d459f98ffa705ad3f6c5e02f86d9fab9"

}

fun retrofitResponse(){

    val retrofit = Retrofit.Builder()
        .baseUrl(RetrofitSetup.url)
        .addConverterFactory(GsonConverterFactory.create())
        .build()
    val weatherApi = retrofit.create(CallWeatherApi::class.java)
    val weatherResponseCall = weatherApi.getWeather(MapViewFragment.test,RetrofitSetup.apiKey)


    weatherResponseCall!!.enqueue(object : Callback<CurrentWeatherResponse?> {
        override fun onResponse(call: Call<CurrentWeatherResponse?>, response: Response<CurrentWeatherResponse?>
        ) {
            if (response.code() == 404) {
                Log.d(TAG,"Successfuly")
            } else if (!response.isSuccessful) {
                Log.d(TAG,"Error")
            }

            val mydata = response.body()
            val main = mydata!!.main
            val temp = main!!.temp
            val pres =main!!.pressure
            val temperature = (temp!! - 273.15).toInt()
            Log.d("TAG","City pressure :" + pres)
            Log.d("TAG","City Temp : " + temperature)


        }
        override fun onFailure(call: Call<CurrentWeatherResponse?>, t: Throwable) {}
    })
}


private const val TAG=“改装连接”
主要内容(){
回应(
}
对象更新设置{
//var test=MapViewFragment.address
var urlAll=“api.openweathermap.org/data/2.5/weather?q={city name}&appid={api key}”
变量url=”https://api.openweathermap.org/data/2.5/"
val apiKey=“d459f98ffa705ad3f6c5e02f86d9fab9”
}
有趣的回应(){
val reformation=reformation.Builder()
.baseUrl(reformationsetup.url)
.addConverterFactory(GsonConverterFactory.create())
.build()
val weatherApi=reformation.create(CallWeatherApi::class.java)
val weatherResponseCall=weatherApi.getWeather(MapViewFragment.test,reformationsetup.apiKey)
weatherResponseCall!!.enqueue(对象:回调){
覆盖fun onResponse(调用:调用,响应:响应
) {
if(response.code()==404){
日志d(标记“成功”)
}如果(!response.isSuccessful),则为else{
Log.d(标记“Error”)
}
val mydata=response.body()
val main=mydata!!.main
val temp=main!!.temp
val pres=主压力!!压力
val温度=(温度!!-273.15).toInt()
Log.d(“标签”,“城市压力:”+pres)
日志d(“标签”,“城市温度:”+温度)
}
覆盖失败(调用:调用,t:Throwable){}
})
}

将“RefughtResponse”放在“RefughtSetup”内,并为地址添加一个参数

object RetrofitSetup {
    private const val urlAll = "api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}"
    private const val url = "https://api.openweathermap.org/data/2.5/"
    private const val apiKey = "keep this private"
    fun retrofitResponse(address: String) {
        ...
        val weatherResponseCall = weatherApi.getWeather(address, apiKey)
        ...
    }
}
然后将地址作为参数传递

nMap.setOnMapLongClickListener { latlng ->
    val address = getAddress(latlng.latitude, latlng.longitude)
    RetrofitSetup.retrofitResponse(address)
}

“地址”在哪里定义?我确实升级了.its global.private lateinit变量地址:Stringits不工作。原因:kotlin.UninitializedPropertyAccessException:lateinit属性地址尚未初始化这是因为您试图在设置任何我不理解的值之前读取它。我是否应该创建其他类似的变量“var test=MapViewFragment.ad
nMap.setOnMapLongClickListener { latlng ->
    val address = getAddress(latlng.latitude, latlng.longitude)
    RetrofitSetup.retrofitResponse(address)
}