2013-11-15 46 views
2

在我的java类中,我声明了一个类作为数组,并且在一个函数中,我将值赋给了类的数组,但是在类中的函数之外它重试了null 。如何访问类数组。在函数中,类变量的数组在java中返回null

声明类的数组变量的是在Java inbuild最终类(https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Marker

代码示例:

public class Sample{ 

     Marker redMarker[]; // Marker is the public final class 

    // https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Marker 

     void function1(){ 
      for(int i=0;i<array.length;i++){ 
       redMarker[i] = map.addMarker(.......); 
      } 
     }  

     void function2(){ 
      if(condition){ 
       if(redMarker!=null){ 
        for(int i=0;i<array.length;i++){ 
        redMarker[i].setVisible(false); 
        } 
       } 
       else{ 
        // here I get redMarker is Null. 
       } 
      } 
     } 
    } 

回答

2

您应该声明标记redMarker [];数组大小

修改您的function2(),如下所示。

void function1(){ 
     if(condition){ 
      if(redMarker!=null){ 

      } 
      else{ 
       redMarker = new Marker[array.length]; // added this line of code. 
      } 
     } 
    } 

修改你的function1(),如下所示。

void function1(){ 
     if(redMarker ==null){ 
      redMarker = new Marker[array.length]; // added this line of code. 
     } 
     for(int i=0;i<array.length;i++){ 
      redMarker[i] = map.addMarker(.......); 
     } 
    }  
+0

感谢它的作品。 –

+0

@murali_ma很高兴听到它。不用谢。 – Prabhakaran

3

你需要首先初始化所述阵列

Marker redMarker[]; 

喜欢的东西

Marker redMarker[] = new Marker[someSize]; 

然后添加值

for (int i = 0; i < someSize; i++){ 
    redMarker[i] = new Marker(); 
} 
+0

感谢它的作品。 –

2

因为你的方法不是静态的,你需要一个构造函数执行以下操作:

public Sample() { 
    redMarker = new Marker[<put the length in here]; 
} 
+0

感谢它的作品。 –

0

如果您正在测试if(redMarker!=null),那么这是很明显的是,else只有当redMarker实际上是null时才会执行该块。

一切正常,因为它应该,错误可能是你的逻辑。

3

redMarker是一个数据成员,它的值默认为null除非你在构造函数或内联初始化。

例如为:

public class Sample{ 
    Marker redMarker[]; 

    public Sample(int numOfMarkers) { 
     redMarker = new Marker[numOfMarkers]; 
    } 
+0

感谢它的作品。 –

0

的功能1检查是否仍有空?

如果是这样,那么你还没有初始化你的redMarker