1

我需要保存一些信息,我过去使用的是共享首选项...

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("Data", (Data));
editor.commit();

所以我会做这样的事情来保存数据,但是对于这个项目,我正在使用类的public class Tab3 extends View implements OnTouchListener类型,我不确定这是否是为什么这不起作用但它不是我不能使用共享首选项 onTouch 我getSharedPreferences说“方法 getSharedPreferences(String, int) 未定义 Tab3 类型“我需要做什么才能以某种方式保存这些数据,以便稍后在我的应用程序中使用它?

4

2 回答 2

3

您需要一个上下文来访问共享首选项。最好的方法是创建MyApplicationApplication类的后代,在那里实例化 preferences并在应用程序的其余部分中使用它们MyApplication.preferences

public class MyApplication extends Application {
    public static SharedPreferences preferences;

    @Override
    public void onCreate() {
        super.onCreate();

        preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);

例如,如果您需要在其他地方访问您的首选项,您可以调用它来读取首选项:

String str = MyApplication.preferences.getString( KEY, DEFAULT );

或者您可以调用它来将某些内容保存到首选项中:

MyApplication.preferences.edit().putString( KEY, VALUE ).commit();

commit()(添加或更改首选项后不要忘记调用!)

于 2012-05-18T23:02:46.293 回答
1

我会按照列尼克所说的去做,但不要让它们成为静态的,而是懒惰地初始化它们。

public class MyApplication extends Application {
    public SharedPreferences preferences;

    public SharedPreferences getSharedPrefs(){
         if(preferences == null){
              preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
         }
         return preferences;
    }

那么在你看来:

 MyApplication app = (MyApplication) getContext().getApplicationContext();
 SharedPreferences settings = app.getSharedPrefs();

正如 eric 所说,这个 Application 类需要在你的清单中声明:

<application android:name=".MyApplication" 
       android:icon="@drawable/icon" 
       android:label="@string/app_name">

参考:

获取应用程序上下文()

Android 全局变量


编辑

(根据您的评论)问题是您实际上并没有保存任何数据,这一行没有意义,您实际上并没有保存变量:

 editor.putString("Data", (Data));

以下是上述使用的示例:

MyApplication app = (MyApplication) getContext().getApplicationContext();
SharedPreferences settings = app.getSharedPrefs();
String str = settings.getString("YourKey", null);

并将某些内容保存到首选项中:

settings.edit().putString("YourKey", "valueToSave").commit();

在自定义视图中使用的更具体示例是:

public class MyView extends View {

   SharedPreferences settings;

     // Other constructors that you may use also need the init() method

     public MyView(Context context){
         super(context);
         init();
     }

      private void init(){
         MyApplication app = (MyApplication) getContext().getApplicationContext();
         settings = app.getSharedPrefs();
      }

      private void someMethod(){ // or onTouch() etc
          settings.edit().putString("YourKey", "valueToSave").commit(); //Save your data
      }

      private void someOtherMethod(){
          String str = settings.getString("YourKey", null); //Retrieve your data
      }

}
于 2012-05-18T23:08:25.163 回答