在第二个 setOnClickListener 代码中使用 address.getLatitude() 访问纬度和经度失败

Posted

技术标签:

【中文标题】在第二个 setOnClickListener 代码中使用 address.getLatitude() 访问纬度和经度失败【英文标题】:Failed to access Latitude and Longitude using address.getLatitude() in second setOnClickListener code 【发布时间】:2021-11-18 23:23:39 【问题描述】:

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

第一个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代码

在第二个setOnClickListener 块代码中,我无法通过address.getLatitude() 访问纬度和经度。我得到错误: 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。

【问题讨论】:

这段代码中到底有什么不符合您的预期?告诉我们共享代码有什么问题。你有什么错误吗? 我想获取某个位置的经纬度,将其存储在double变量中,但是我找不到方法... event.put("eventLocationLat", address.getLatitude); event.put("eventLocationLong", address.getLongitude); 我尝试使用address.getLatitude 访问,出现错误:Cannot resolve symbol 'address' 那么,我想知道是否有另一种方法可以让我从第二个 setOnClickListener 访问 Lat 和 Long? 如果我没有明确说明问题,我深表歉意。 【参考方案1】:

您收到以下错误:

无法解析符号“地址”

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

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

private Address address;

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

 address = addressList.get(0);

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

【讨论】:

这正是我所需要的,非常感谢你,Alex。

以上是关于在第二个 setOnClickListener 代码中使用 address.getLatitude() 访问纬度和经度失败的主要内容,如果未能解决你的问题,请参考以下文章

阵列适配器在第二个活动中崩溃

在第二个查询中查询两个单独的表传递结果,同时仅在第二个查询返回 null 时保留第一个查询的结果

在第二种方法中,第二个微调器值没有改变

在第二个 ViewController 中禁用 closeButton

UIMenuController 不显示在第二个 UIViewController

在第二个字符后添加“ /”符号