2012-06-11 38 views
3

我創建的類的應用程序的那樣ArrayList的作爲全局變量

package com.appnetics; 

import java.util.ArrayList; 

import android.app.Application; 

public class GlobalVariables extends Application { 

    public ArrayList<Encounter> encounters; 

} 

這樣

<application 
android:name="GlobalVariables" 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" > 

在一個活性研究擴展,並將其設置在manifist我填使用此代碼

此數組
GlobalVariables appState = new GlobalVariables(); 
appState.encounters =new ArrayList<Encounter>(); 
................ 
then add 

當試圖使用它與空異常崩潰,我用它在另一個活動或類如

GlobalVariables appState = new GlobalVariables(); 

    Encounter EncounterObject = appState.encounters.get(position); 

是有缺什麼請,如何解決

+1

您正在創建GlobalVariabels的每一次新的實例。所以當你試圖讓你的列表得到(位置)將爲空 –

回答

4

這是GlobalVariables類的實例變量,所以每次創建的GlobalVariables實例,你會得到一個單獨的變量。

如果你真的一個全局變量,它應該是一個靜態變量 - 但即使這樣,如果你在同一進程中的活動之間共享數據纔有效。您應該閱讀Android Application Framework FAQ以獲取更多信息。

3

我會在這裏使用Singleton模式。 Wikipedia link

public class GlobalVariables { 
    public ArrayList<Encounter> encounters; 

    private GlobalVariables() { 
    encounters = new ArrayList<Encounter>(); 
    } 

    private static GlobalVariables instance; 

    public static GlobalVariables getInstance() { 
    if (instance == null) instance = new GlobalVariables(); 
    return instance; 
    } 
} 

然後你就可以通過訪問您的數據:提供一個

GlobalVariables.getInstance().encounters.get(position); 
1

您可以單([http://en.wikipedia.org/wiki/Singleton_pattern])班對象的實例。在這個類中創建可用的ArrayList。你可以在你想要的地方訪問這個數組列表。 例如單例類:

public class Singleton { 

private ArrayList<Object> arrayList; 

private static Singleton instance; 

private Singleton(){ 
    arrayList = new ArrayList<Object>(); 
} 

public static Singleton getInstance(){ 
    if (instance == null){ 
     instance = new Singleton(); 
    } 
    return instance; 
} 

public ArrayList<Object> getArrayList() { 
    return arrayList; 
} 
} 

並使用活動:

public class MyActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Singleton.getInstance().getArrayList(); 
} 
} 
1

您可以通過調用構造函數,每次創建新的應用程序對象,而不是你應該得到應用參考,以法,getApplication( )。所以,你應該修改你的代碼:

GlobalVariables appState = (GlobalVariables) getApplication(); 
appState.encounters =new ArrayList<Encounter>(); 
................ 
then add 

GlobalVariables appState = (GlobalVariables) getApplication(); 

Encounter EncounterObject = appState.encounters.get(position); 
+0

好吧,但我需要從類擴展中調用它擴展AsyncTask 如何getApplication() – AMH

+0

將其稱爲類擴展AsyncTask您需要將應用程序或活動引用傳遞給AsyncTask。調用asyncktask的 – jeet

+0

從片段 擴展,所以我只有上下文 – AMH