我有一个监听器,我想访问监听器方法之外的变量。但即使在全局初始化变量之后,它也会在范围外显示“0”。
任何人都可以解释原因
public class MapsActivity{
double origin_lat;
//
@Override
public void onMapReady(GoogleMap googleMap) {
//
srcLat.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
double value = (double) dataSnapshot.getValue();
origin_lat=value; -- > value shows here
Log.d("SourceLatitude",Double.toString(value));
}
});
Log.d("OutsideScope",Double.toString(origin_lat)); -- > shows "0"
}
}
答案 0 :(得分:1)
我有一个监听器,我想访问监听器之外的变量 方法。但即使在全局初始化变量之后也显示出来 " 0"外部范围。
任何人都可以解释原因
因为您认为onMapReady/onDataChange
是async
而不是sync
。在第一种情况下以及在第二种情况下新数据可用时,Android将其称为初始化。让它们异步的目的是避免在计算量大的情况下阻止UI线程,让用户可以与UI进行交互
答案 1 :(得分:0)
让自己熟悉意图。意图是Android应用程序中非常基本的东西。 这是纪录片:Android Docu
然后您将向您的活动发送意图。 在活动中,您将注册一个使用意图值的接收器。
答案 2 :(得分:0)
这就是你告诉应用程序要做的事情:
ListenerForSingleValueEvent
添加到srcLat
并打印当前值origin_lat
onDataChange
),您希望更改origin_lat
的值并打印出来。请注意,在第1步中,origin_lat
尚未(必然)修改onDataChange
的值,因为onDataChange
尚未被调用。一旦发生这种情况,origin_lat
将会改变。
正如Blackbelt所说,您似乎认为代码是按顺序运行的,因为它是按顺序编写的。买你添加某种异步监听器,它会随时运行。