2013-11-15 47 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