Я сохранил общие предпочтения в настройках активности и могу получить их при загрузке.Также я могу получить те же общие настройки в основной деятельности.Однако, когда я пытаюсь вызвать его в отдельном классе, который я намереваюсь использовать на адаптере в представлении реселлера, так как в качестве префикса в каждом элементе представления карты, я получаю нулевую ошибку.Ниже приведены проблемы:
- Я сталкиваюсь с трудностями при настройке правильного контекста.
- Я попытался создать метод получения в классе / деятельности предпочтения, который возвращает ноль при вызове из отдельногоJava-класс.
- Я попытался определить контекст в классе адаптера и использовать его следующим образом
public SharedPreferences sharedPreferences;
public Context context;
...
sharedPreferences=PreferenceManager.getDefaultSharedPreferences(this.context);
userCurrency = sharedPreferences.getString("sPrefix","");
Также попытался:
sharedPreferences=PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
Я получаю следующую ошибку при вызове этой строки sharedpreference.
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
Подскажите, пожалуйста, как настроить геттер, который я могу вызвать из отдельного класса, или инициализировать иполучить значения в этом отдельном классе напрямую.
Основное действие
открытый класс MainActivity расширяет AppCompatActivity {
Button btnm, btnw, btnsep;
Intent intent;
TextView tvRecall;
Third third;
Shared shared;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnm = findViewById(R.id.btnmain);
btnw = findViewById(R.id.btnwhat);
btnsep = findViewById(R.id.sepClass);
tvRecall=findViewById(R.id.txtRecall);
intent = new Intent(this, Shared.class);
btnm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(intent);
}
});
btnw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String s = sharedPreferences.getString("txt","");
Log.i("testlog*****","t "+ s);
Toast.makeText(getApplicationContext(),"Text is " + s,Toast.LENGTH_SHORT).show();
}
});
btnsep.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
third = new Third();
third.callSharedPreference();
}
});
}
Деятельность по сохранению общего префикса
открытый класс Shared расширяет AppCompatActivity {
EditText textView ;
Button btn;
SharedPreferences sharedPreferences;
Context c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shared);
textView = findViewById(R.id.txtName);
btn = findViewById(R.id.btnName);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
sharedPreferences.edit().putString("txt",textView.getText().toString()).apply();
}
});
}
public Shared () { }
public void getlog () {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(c);
String s = sharedPreferences.getString("txt","");
Log.i("testlog*****","t "+ s);
Toast.makeText(getApplicationContext(),"Text is " + s,Toast.LENGTH_SHORT).show();
}
Третий класс для вызова sharedpreference с нулевой ошибкой, как указано выше при вызове
public class Third {
Context context;
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
String s = sharedPreferences.getString("txt","");
public Third (){}
public void callSharedPreference () {
Log.i("testlog*****","t "+ s);
Toast.makeText(context.getApplicationContext(),"Text is ==== " + s,Toast.LENGTH_SHORT).show();
}