我是OOP和Android的诺言,我面临一个令我很沮丧的小问题。 我正在创建一个使用永久存储的应用程序。 最初我创建了访问保存的首选项的代码,这些首选项都混合到MainActivity中,但是我想将该代码移动到一个单独的类文件中。 问题是,由于某种原因,它不能在一个单独的类文件中工作,并且在尝试和尝试之后我发现我可以在MainActivity类中创建一个内部类,并且它的工作方式。 我相信它与以下事实有关:如果我将其创建为内部类,我不需要使内部类扩展Activity(再次)。 在为永久存储处理创建外部类时,我需要在该类上扩展Activity,我认为这是问题,但我不确定。 有人可以向我解释为什么会发生这种情况并提出正确的建议吗? 下面我将包含一个有效的代码片段,但我的目标是能够在一个单独的类文件中创建类PermanentStorageHelper。 提前谢谢!
public class MainActivity extends Activity {
public static MainActivity _mainActivity;
private TextView textView1;
// OnCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Persistent preferences
PermanentStorageHelper ps = new PermanentStorageHelper();
// UI Initialization
textView1 = (TextView) findViewById(R.id.textView1);
String uId = ps.getuId();
UiHelper.displayOnTextView(this, R.id.textView1, uId);
}
// =============================================
// This is the class I'm talking about, I'm unable to move this to
// a separated class (.java) file.
// It seems to be related to the fact that, if making this a separated
// class file, I need to extend Activity again and that is what
// seems to be the problem
// =============================================
public class PermanentStorageHelper /*extends Activity*/{
// CONSTANTS
public static final String USERUNIQUEID="userUniqueID"; // Saved setting 1
public static final String FILENAME="mtcPreferences"; // Filename for persisting storage file
// Fields
public SharedPreferences shp; // SharedPreferences field (1)
public String uId;
public PermanentStorageHelper(){
// Preferences initialization (2)
shp = getSharedPreferences(FILENAME, MODE_PRIVATE);
// Read Preferences (3)
uId = shp.getString(USERUNIQUEID, null);
}
// Getters and Setters
public String getuId() {
return uId;
}
public void setuId(String uId) {
this.uId = uId;
}
}
答案 0 :(得分:2)
将上下文传递给新类:
public PermanentStorageHelper(Context context){
// Preferences initialization (2)
shp = context.getSharedPreferences(FILENAME, MODE_PRIVATE);
}
然后你可以创建你的类:
new PermanentStorageHelper(MainActivity.this)
答案 1 :(得分:0)
getSharedPreferences
您需要有权访问activity
或applicationContext
您可以向构造函数添加上下文并使用它来调用getSharedPreferences
:
public PermanentStorageHelper(Context context){
// Preferences initialization (2)
shp = context.getSharedPreferences(FILENAME, MODE_PRIVATE);
// Read Preferences (3)
uId = shp.getString(USERUNIQUEID, null);
}
在这种情况下,您需要在创建对象实例时传递它:
PermanentStorageHelper ps = new PermanentStorageHelper(getApplicationContext());
或
PermanentStorageHelper ps = new PermanentStorageHelper(MainActivity.this);