Java 在视图类中保存SharedReferences

Java 在视图类中保存SharedReferences,java,android,view,save,sharedpreferences,Java,Android,View,Save,Sharedpreferences,我需要保存一些信息,我过去使用的是SharedReferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("Data", (Data)); editor.commit(); 因此,我会这样做来保存数据,但是对于这个项目,我使用公共类Tab3扩展视图实现了类的Touch

我需要保存一些信息,我过去使用的是SharedReferences

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

因此,我会这样做来保存数据,但是对于这个项目,我使用公共类Tab3扩展视图实现了类的TouchListener类型,我不确定这是否是为什么它不起作用,但它不是。我不能在Touch上使用共享优先级。我在GetSharedReferences上得到一个错误,说方法GetSharedReferenceString,int对于类型Tab3是未定义的。我需要做什么才能以某种方式保存此数据,以便以后在我的应用程序中使用它?

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

String str = MyApplication.preferences.getString( KEY, DEFAULT );
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
settings.edit().putString("YourKey", "valueToSave").commit();
例如,如果您需要访问其他地方的首选项,您可以调用此选项来读取首选项:

String str = MyApplication.preferences.getString( KEY, DEFAULT );
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
settings.edit().putString("YourKey", "valueToSave").commit();
或者您可以调用此选项将某些内容保存到首选项:

String str = MyApplication.preferences.getString( KEY, DEFAULT );
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
settings.edit().putString("YourKey", "valueToSave").commit();

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

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

String str = MyApplication.preferences.getString( KEY, DEFAULT );
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
settings.edit().putString("YourKey", "valueToSave").commit();
例如,如果您需要访问其他地方的首选项,您可以调用此选项来读取首选项:

String str = MyApplication.preferences.getString( KEY, DEFAULT );
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
settings.edit().putString("YourKey", "valueToSave").commit();
或者您可以调用此选项将某些内容保存到首选项:

String str = MyApplication.preferences.getString( KEY, DEFAULT );
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
settings.edit().putString("YourKey", "valueToSave").commit();

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

我会照lenik说的做,但不要让它们变成静态的,而是懒洋洋的初始化它们

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 android:name=".MyApplication" 
       android:icon="@drawable/icon" 
       android:label="@string/app_name">
以下是上述使用中的示例:

MyApplication app = (MyApplication) getContext().getApplicationContext();
SharedPreferences settings = app.getSharedPrefs();
String str = settings.getString("YourKey", null);
要将某些内容保存到首选项,请执行以下操作:

String str = MyApplication.preferences.getString( KEY, DEFAULT );
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
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
      }

}

我会照lenik说的做,但不要让它们成为静态的,而是懒惰地初始化它们

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 android:name=".MyApplication" 
       android:icon="@drawable/icon" 
       android:label="@string/app_name">
以下是上述使用中的示例:

MyApplication app = (MyApplication) getContext().getApplicationContext();
SharedPreferences settings = app.getSharedPrefs();
String str = settings.getString("YourKey", null);
要将某些内容保存到首选项,请执行以下操作:

String str = MyApplication.preferences.getString( KEY, DEFAULT );
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
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
      }

}

伟大的那么,我将如何保存这些内容,然后稍后再调用它?@MichaelZeuner就像你在问题中写的那样,一旦你有了SharedReferences实例,就可以使用它,但是你仍然有点困惑,我必须保存的是MyApplication app=MyApplication getContext.getApplicationContext;SharedReferences设置=app.getSharedRefers;SharedReferences.Editor=settings.edit;editor.putStringData,数据;editor.commit;然后再调用我的应用程序app=MyApplication getContext.getApplicationContext;SharedReferences设置=app.getSharedRefers;Data=settings.getStringData,未知;“我做错了什么?”布伦德尔,你没抓住重点。如果不将它们设置为静态,您将无法从没有上下文的位置访问首选项,这就是本练习的全部目的-使首选项在任何地方都可用。@lenik他希望在视图类中使用SharedReferences。这里你总是有一个上下文。太好了!那么,我将如何保存这些内容,然后稍后再调用它?@MichaelZeuner就像你在问题中写的那样,一旦你有了SharedReferences实例,就可以使用它,但是你仍然有点困惑,我必须保存的是MyApplication app=MyApplication getContext.getApplicationContext;SharedReferences设置=app.getSharedRefers;SharedReferences.Editor=settings.edit;editor.putStringData,数据;editor.commit;然后再调用我的应用程序app=MyApplication getContext.getApplicationContext;SharedReferences设置=app.getSharedRefers;Data=settings.getStringData,未知;“我做错了什么?”布伦德尔,你没抓住重点。如果不将它们设置为静态,您将无法从没有上下文的位置访问首选项,这就是本练习的全部目的-使首选项在任何地方都可用。@lenik他希望在视图类中使用SharedReferences。在这里,你总是有一个上下文。你能编辑这个问题,告诉我如何使用它保存某个东西,然后我又如何调用它吗?那太好了,谢谢!这是我的代码文件,我仍然很困惑我做错了什么,也许这会帮助更多,在SectionManager.java中,应该使用与其他文件相同的MyApplication.preferences。现在你有两个不同的首选项,难怪如果你写一个,另一个保持原来的状态。我把它改成了那个,数据信息仍然以未知的形式传递?这是文件,确保我做了你说的。看起来李
是否对putString和getString使用不同的键参数,即“Data”和“DataInfo”。此外,您保存的值是字符串“Unknow”,这很容易与“Unknow”混淆-请将其更改为不同的值以及上面提到的键。您能否编辑此问题,向我展示如何使用此键保存某个内容,然后再将其调用?那太好了,谢谢!这是我的代码文件,我仍然很困惑我做错了什么,也许这会帮助更多,在SectionManager.java中,应该使用与其他文件相同的MyApplication.preferences。现在你有两个不同的首选项,难怪如果你写一个,另一个保持原来的状态。我把它改成了那个,数据信息仍然以未知的形式传递?这是文件,确保我做了你说的。看起来您对putString和getString使用了不同的键参数,即“Data”和“DataInfo”。此外,您保存的值是字符串“Unknow”,很容易与“Unknow”混淆-请将其更改为其他值以及上面提到的键。