Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 非活动类或RecyclerView适配器类中的SharedReference_Java_Android_Sharedpreferences - Fatal编程技术网

Java 非活动类或RecyclerView适配器类中的SharedReference

Java 非活动类或RecyclerView适配器类中的SharedReference,java,android,sharedpreferences,Java,Android,Sharedpreferences,我已将SharedReferences保存在设置活动上,并能够在加载时获取它。我还能够在主活动中获取相同的共享首选项。然而,当我试图在一个单独的类上调用它时,我打算在recyclerview适配器上使用它,就像每个card视图元素中的前缀一样,我得到一个空错误。以下是挑战: 我在建立正确的环境方面面临困难 我尝试在首选项类/活动中创建一个getter 从单独的java类调用时返回null 我尝试在适配器类中定义一个上下文,并按如下方式使用它 也尝试过: sharedPreferences=Pr

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

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

  • 也尝试过:

    sharedPreferences=PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); 
    
    调用此SharedReference行时出现以下错误

    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();
            }
        });
    
    }
    
    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();
    }
    
    保存共享pref的活动 公共类共享扩展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();
            }
        });
    
    }
    
    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();
    }
    
    调用SharedReference的第三个类,调用时会出现如上所述的null错误 公共三等舱{

    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
    }
    //...
    }
    

    context
    对象是什么?请发布整个代码。欢迎使用SO salman。您是否尝试过:
    GetDefaultSharedReferences(context);
    只有一个
    context
    ?请在您的问题中添加这些代码日志,不要将其作为注释发送。(使用编辑按钮)不过,也请在这里查看我的答案:嗨,流浪者。我终于找到了发布代码的方法。刚刚编辑了我的问题。嗨,莫森,谢谢。刚刚更新以提供代码的完整视图。谢谢莫森的帮助。我是用你的参考资料找到的。似乎我传递了错误的上下文。我仍然在想如何标记代码斯蒂恩回答了你的评论。