访问内部类中的变量

时间:2017-04-02 15:12:32

标签: java android maps inner-classes

我有一个监听器,我想访问监听器方法之外的变量。但即使在全局初始化变量之后,它也会在范围外显示“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"
   }
 } 

3 个答案:

答案 0 :(得分:1)

  

我有一个监听器,我想访问监听器之外的变量   方法。但即使在全局初始化变量之后也显示出来   " 0"外部范围。

     

任何人都可以解释原因

因为您认为onMapReady/onDataChangeasync而不是sync。在第一种情况下以及在第二种情况下新数据可用时,Android将其称为初始化。让它们异步的目的是避免在计算量大的情况下阻止UI线程,让用户可以与UI进行交互

答案 1 :(得分:0)

让自己熟悉意图。意图是Android应用程序中非常基本的东西。 这是纪录片:Android Docu

然后您将向您的活动发送意图。 在活动中,您将注册一个使用意图值的接收器。

答案 2 :(得分:0)

这就是你告诉应用程序要做的事情:

  1. 当地图准备就绪后,将ListenerForSingleValueEvent添加到srcLat并打印当前值origin_lat
  2. 从现在开始,当数据发生变化时(在新添加的侦听器上调用onDataChange),您希望更改origin_lat的值并打印出来。
  3. 请注意,在第1步中,origin_lat尚未(必然)修改onDataChange的值,因为onDataChange尚未被调用。一旦发生这种情况,origin_lat将会改变。

    正如Blackbelt所说,您似乎认为代码是按顺序运行的,因为它是按顺序编写的。买你添加某种异步监听器,它会随时运行。