非活动类或RecyclerView适配器类中的SharedPreference

萨尔曼

我在设置活动中保存了sharedpreferences,并能够在加载时获取它。我也可以在主要活动中获取相同的共享首选项。但是,当我尝试在打算在recyclerview适配器上使用的单独类上调用它时,就像每个卡视图元素中的前缀一样,我得到了空错误。以下是挑战:

  1. 我在建立正确的环境方面面临困难。
  2. 我尝试在首选项类/活动中创建一个吸气剂,当从一个单独的java类中调用该方法时返回null。
  3. 我尝试在适配器类中定义上下文,并按如下方式使用它

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

请帮助我如何设置可以从单独的类调用的getter,或者直接在此单独的类中初始化并获取值。

主要活动

公共类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();
        }
    });

}

保存共享首选项的活动

公共类共享扩展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,当调用时给出如上所述的空错误

公共课第三{

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();

}
法拉赫·阿巴斯

在第三个类中,上下文未初始化,因此您应在构造函数方法中对其进行初始化,并在调用该类时将值传递给它...

public class Third {
Context context;
SharedPreferences sharedPreferences = 
PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
String s = sharedPreferences.getString("txt","");


public Third (Context context){
    this.context=context
}
//...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在RecyclerView适配器中显示sharedpreference

如何从recyclerview适配器类更改主要活动中的textview文本

适配器类中的调用方法

如何在同一recyclerview的适配器类中更新recyclerview?

如何在活动之前调用适配器类

尝试从适配器类加载活动时出现错误

如何在适配器类之外更新RecyclerView适配器

从活动中获取数据到RecyclerView适配器中?

使用多个RecyclerView一个适配器类

如何从片段中的RecyclerView适配器启动活动

单击活动类中的按钮,如何在适配器的微调器上过滤列表

适配器类中的数据更改后,在活动上更新textview

适配器类与数据类中的toXXX()方法

如何在适配器类中维护recyclerview项目的可见性

在RecyclerView适配器类中询问权限-未调用onRequestPermissionsResult

来自 url 的 setRingtone 和适配器类中的 RecyclerView (Android)

当数据库中没有数据时,如何使用适配器类和 recyclerview 跳过第二个活动?

我在 recyclerview 中有 3 个按钮,它们的点击事件是在主要活动上而不是在适配器类中设置的?

从 recyclerview 适配器开始新活动

类扩展类的适配器

从适配器类扩展类

无法调用适配器类中的构造函数

Java类,用于从Kotlin中的适配器访问数据

片段未在适配器类中替换

Butterknife无法绑定到我的适配器类中

getSupportFragmentManager()在适配器类中不起作用?

listview适配器类中的startActivity失败

OnClickListener在适配器类中不起作用

gridview的适配器类中的多个图像数组