2012-04-14 44 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

相关问题