2

我有一个扩展SurfaceView的GamePanel类,所以我不能扩展Activity为SharedPreferences。如何在不扩展类的情况下使用getSharedPreferences?如何在不扩展Activity的情况下使用getSharedPreferences?

我已经尝试:

SharedPreferences sp = Activity.getSharedPreferences("MyScore", Context.MODE_PRIVATE); 

不过,我得到它说“不能从静态上下文中引用的错误

+0

创建'GamePanel'对象时传递上下文 –

回答

1

您可以初始化你的应用程序类的Sharedpreferences作为一个静态变量。然后使用,在每一个非活动类:

public class MyApplication extends Application { 

    private static SharedPreferences sharedPreferences; 

    public static SharedPreferences getSharedPreferences() { 
     return sharedPreferences; 
    } 

    public void setSharedPreferences(SharedPreferences sharedPreferences) { 
     this.sharedPreferences = sharedPreferences; 
    } 

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

     setSharedPreferences(MyApplication.this 
      .getSharedPreferences("MyScore",getApplicationContext().MODE_PRIVATE)); 

现在,每当你想访问一个静态的背景下sharedprefs,你可以随时使用它像这样:

String value = MyApplication.getSharedPreferences().getString("key",""); 
0

尝试使用这种方式

活动类

package com.test.conf1; 
     import android.support.v7.app.AppCompatActivity; 
     import android.os.Bundle; 
     public class MainActivity extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      TestClass testPref = new TestClass(this); //creating object and passing context 
      testPref.putStringToSharedPref("MY_APP_PREF","name","your_name"); //put string to shared pref 
    String myName = testPref.getStringFromSharedPref("MY_APP_PREF","name");// get String from sharef pref 
    } 
} 

辅助类共享偏爱

package com.test.conf1; 

import android.content.Context; 
import android.content.SharedPreferences; 

public class TestClass { 
    private Context mContext; 
    public TestClass(Context context){ 
     mContext = context; 
    } 

    public void putStringToSharedPref(String prefName,String key,String value){ 
     SharedPreferences myPref =mContext.getSharedPreferences(prefName,Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = myPref.edit(); 
     editor.putString(key,value); 
     editor.commit(); 
    } 
    public String getStringFromSharedPref(String prefName,String key){ 
     SharedPreferences myPref = mContext.getSharedPreferences(prefName, Context.MODE_PRIVATE); 
     String value= myPref.getString(key,""); 
     return value; 
    } 
} 

这可以有帮助

相关问题