首页 > 解决方案 > 在第二个 setOnClickListener 代码中使用 address.getLatitude() 访问纬度和经度失败

问题描述

请问,如何从下面的第一个获取纬度和经度setOnClickListener并将其传递给第二个setOnClickListener?我想通过使用第二个中的代码将纬度和经度存储在 Firestore 中setOnClickListener。我的想法是当我点击Search Icon时,该应用程序将获取该位置的纬度和经度。位置搜索

第一个setOnClickListener代码

searchLoc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Geocoder geoceoder = new Geocoder(getApplicationContext(), Locale.getDefault());
                try{
                    List<Address> addressList = geoceoder.getFromLocationName(locationName, 3);

                    if(addressList.size() > 0){
                        //The address variable is declared in the first setOnClickListener.
                        Address address = addressList.get(0);
                        goToLocation(address.getLatitude(), address.getLongitude());
.
.
.
                        

第二个setOnClickListener代码

我无法通过address.getLatitude()第二个setOnClickListener块代码访问纬度和经度。我得到错误: Cannot resolve symbol 'address'

create_eventBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Map<String,Object> event = new HashMap<>();
                //Couldn't access the "address" in first setOnClickListener using address.getLatitude
                event.put("eventLocationLat", address.getLatitude);
                event.put("eventLocationLong", address.getLongitude);
                fStore.collection("event").add(event)...;
});

因此,当用户按下底部的“创建事件setOnClickListener”按钮时,第二个将被执行并将经纬度存储在Firestore中。

添加事件 在此处输入图像描述

标签: javaandroidfirebasegoogle-mapsgoogle-cloud-firestore

解决方案


您收到以下错误:

无法解析符号“地址”

因为您已经address在第一个侦听器的范围内声明了该对象。这意味着该对象在第二个侦听器中不可见,因此出现错误。

为了解决这个问题,将变量声明为类的成员:

private Address address;

在第一个监听器中初始化它:

 address = addressList.get(0);

然后简单地在你的第二个监听器中使用它。错误将消失。


推荐阅读