2012-04-14 69 views
0

我做了一個SharedPreferences類,以便我的其餘活動可以在線使用來獲取首選項。在Android中使用SharedPreferences類?

public class SPAdapter extends Activity { 

    public final String preferenceSettings = "STORAGE"; 

     // Default value if row does not exist in preference 
    public static final String rowExistence = "Row did not exist"; 

public String prefGet(String preferenceName, String rowId) { 
    SharedPreferences preferenceObject = getSharedPreferences(preferenceName, MODE_PRIVATE); 
    String value = preferenceObject.getString(rowId, rowExistence); 
    return value; 
} 

我用這樣的方法,以便:

public class Splash extends Activity { 

    private SPAdapter spObject; 
    public String rowNumber(0); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

     spObject.prefGet(spObject.preferenceSettings, 
      rowNumber); 
} 

然而,每當我試圖用這個方法,應用程序崩潰顯示有關上下文中的錯誤。有人能幫我解決這個問題嗎?

+0

添加堆棧跟蹤爲我們在認罪思考:) – erbsman 2012-04-14 06:16:01

+0

你可以看到這個鏈接瞭解如何輕鬆使用SharedPreferences: http://stackoverflow.com/questions/10127396/save-values-before-close- the-app/10127842#10127842 – secretlm 2012-04-14 07:22:27

回答

0

這種方法的問題是,您從Activity擴展SPAdapter並且沒有正確初始化它,它沒有適當的上下文集,所以它無法通過它從框架獲取SharedPreferences實例。但無論如何,這不是你在Android中做事情的方式,你不是實例化新的Activity對象的人,它應該是框架的工作。這裏有兩種方式來實現它的工作:

  • 從SPAdapter擴展您的Splash活動。

  • 不要從Activity擴展SPAdapter,只需傳遞Context對象的引用並使用該對象獲取SharedPreferences實例。類似這樣的:

    public class SPAdapter {0} {0} {0} public final String preferenceSettings =「STORAGE」;

    // Default value if row does not exist in preference 
    public static final String rowExistence = "Row did not exist"; 
    
    private Context ctx; 
    
    public SPAdapter(Context ctx){ 
        this.ctx = ctx; 
    } 
    
    public String prefGet(String preferenceName, String rowId) { 
        SharedPreferences preferenceObject = ctx.getSharedPreferences(
          preferenceName, Context.MODE_PRIVATE); 
        String value = preferenceObject.getString(rowId, rowExistence); 
        return value; 
    } 
    

    }

使用方法如下:

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

     SPAdapter sa = new SPAdapter(getApplicationContext()); 
     sa.prefGet("", ""); 
    } 
} 

第一個解決方案似乎是一個好一點海事組織。

+0

感謝您的幫助。我不完全理解Android中的Context,或許是時候做一些研究。現在我會用你的解決方案。 – Hennaz 2012-04-14 06:28:30