2

У меня есть класс GamePanel, который расширяет SurfaceView, поэтому я не могу продлить действие для SharedPreferences. Как использовать getSharedPreferences без расширения класса?Как использовать getSharedPreferences без расширения Activity?

Я уже пробовал:

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

Однако я получаю ошибку, которая говорит, что «не может ссылаться из статического контекста

+0

Pass Context при создании объекта GamePanel –

ответ

1

Вы можете инициализировать Sharedpreferences в классе Application в качестве статической переменной. а затем использовать его в каждом классе неактивности:

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

Это может полезно

Смежные вопросы