2012-03-08 39 views
1

我正試圖創建一個類來處理存儲和檢索兩個用戶設置'radius'和'cluster'。Android SharedPreferences getSharedPreferences上的NullPointerExceptionException

加載「設置」活動時,我得到一個空指針異常。從用戶設置

段:

storage = new Persistence(); 
    radius = (EditText) findViewById(R.id.etRadius);   
    radius.setText(String.valueOf(storage.getRadius())); <-- Problem 

類來處理持久性:

public class Persistence extends Activity { 

    private static final String PREFERENCES = "tourist_guide_preferences"; 
    private SharedPreferences settings; 
    private SharedPreferences.Editor editor; 

    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     settings = getSharedPreferences(PREFERENCES, 0); 
     editor = settings.edit(); 
    } 

    public int getRadius() 
    { 
     return settings.getInt("radius", 2000); 
    } 

    public int getClusterSize() 
    { 
     return settings.getInt("cluster", 50); 
    } 

    public void setRadius(int radius) 
    { 
     editor.putInt("radius", radius); 
     editor.commit(); 
    } 

    public void setClusterSize(int size) 
    { 
     editor.putInt("cluster", size); 
     editor.commit();   
    } 
} 
+1

請結帳在這裏:這個最好的最好的例子http://stackoverflow.com/questions/5734721/android-shared-preferences – 2012-03-08 18:41:29

回答

1

Persistence類不應該是一個Activity。你應該使它成爲一個普通的類,並將其onCreate的代碼放在這個普通的類構造函數中。

改變它看起來像這樣:

public class Persistence { 

    private static final String PREFERENCES = "tourist_guide_preferences"; 
    private SharedPreferences settings; 
    private SharedPreferences.Editor editor; 
    private Context context; 


    public Persistence(Context context) 
    { 
     this.context = context; 
     settings = context.getSharedPreferences(PREFERENCES, 0); 
     editor = settings.edit(); 
    } 

    public int getRadius() 
    { 
     return settings.getInt("radius", 2000); 
    } 

    public int getClusterSize() 
    { 
     return settings.getInt("cluster", 50); 
    } 

    public void setRadius(int radius) 
    { 
     editor.putInt("radius", radius); 
     editor.commit(); 
    } 

    public void setClusterSize(int size) 
    { 
     editor.putInt("cluster", size); 
     editor.commit();   
    } 
} 

而在你的活動,你實例化這個Persistence類是這樣的:

storage = new Persistence(this); 
+0

我試過,我不能使用'getSharedPreferences'函數。還有什麼我應該用的呢? – Jack 2012-03-08 18:40:00

+0

您可能沒有上下文來調用getSharedPreferences。你可以從上下文變量中調用這個方法。 – 2012-03-08 18:40:59

+0

謝謝,這個工程。歡呼的代碼呢! +1 – Jack 2012-03-08 18:44:38

1

存儲=新的Persistence();這不會調用持續活動的onCreate。 這會更好,你創建一個普通的類。您創建一個上下文變量並使用它來創建sharedpreference實例。你應該從一個活動類中調用這個通用類

+0

謝謝,這個工程。 +1 – Jack 2012-03-08 18:44:22

相關問題