在第二个 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