将功能提取到分离的类文件不起作用

时间:2013-07-14 17:01:41

标签: android

我是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;
    }

}

2 个答案:

答案 0 :(得分:2)

将上下文传递给新类:

    public PermanentStorageHelper(Context context){

    // Preferences initialization (2)
    shp = context.getSharedPreferences(FILENAME, MODE_PRIVATE);

}

然后你可以创建你的类:

new PermanentStorageHelper(MainActivity.this)

答案 1 :(得分:0)

getSharedPreferences您需要有权访问activityapplicationContext

您可以向构造函数添加上下文并使用它来调用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);