Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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
Android中字符串的共享首选项_Android_String_Sharedpreferences_Preferences - Fatal编程技术网

Android中字符串的共享首选项

Android中字符串的共享首选项,android,string,sharedpreferences,preferences,Android,String,Sharedpreferences,Preferences,我正在尝试将字符串值的首选项设置为: //onCreate if(name==null){ setprefer(); } else{ getpref(); } private void setprefer() { et1 = (EditText) findViewById(R.id.editText1);

我正在尝试将字符串值的首选项设置为:

//onCreate
    if(name==null){
                setprefer();
            }
            else{
                getpref();
            }

    private void setprefer() {
            et1 = (EditText) findViewById(R.id.editText1);
            b1 = (Button) findViewById(R.id.button1);
            b1.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    s = et1.getText().toString();
                    if(s.matches(""))
                    {
                        //wait!! 
                        Toast.makeText(Home.this, "Enter your name", Toast.LENGTH_SHORT).show();
                    }
                    else{
                        setpref(s);
                        Intent i = new Intent(Home.this, Homescreen.class);
                        i.putExtra("name", s);
                        startActivity(i);
                        Home.this.finish();
                    }
                }
            });
        }

        private void setpref(String name) {
            SharedPreferences pref = this.getSharedPreferences("prefkey", Context.MODE_PRIVATE);
            Editor editor = pref.edit();
            editor.putString("key", name);
            editor.commit();        
        }
        private void getpref() {
            SharedPreferences prefs = this.getSharedPreferences("prefkey", Context.MODE_PRIVATE);
            s = prefs.getString("key", name);
            Intent i = new Intent(Home.this, Homescreen.class);
            i.putExtra("name", name);
            startActivity(i);
            Home.this.finish();
        }
我正在使用setPreference()方法设置首选项,但每次启动活动时,它都会询问我已存储在首选项中的名称。 不知何故,我无法在上面的代码中获得已保存的首选项。
请提出修复建议。

这取决于执行此操作时
名称的功能:

if(name==null){
    setprefer();
}
else{
    getpref();
}

但由于在检查之前,您没有给
name
变量赋值,所以它是null,因此每次都调用
setpreference()
。在检查
name==null
共享首选项是否有一个名为()的方法之前,您需要从SharedPrefs获取值并将其赋值到
name
。请尝试检查共享首选项是否已存在。如果首选项存在,该方法将返回true。

从共享pref中拉取文件,您可以查看值。我不确定是否有足够的上下文(特别是
onCreate
的实际完整代码)来确定问题。onCreate中没有其他内容。我只调用了指定的几个函数,你把变量s和name搞乱了,比如s=prefs.getString(“key”,name);您已经从变量“s”中的共享首选项中获得了值。但是你通过了i.putExtra(“名字”,名字);如果您这样做了,并且它是空的,那么它将崩溃,并出现NullPointerException。所以不要那样做。而且,“火柴”也不太好。在这两种情况下,都使用TextUtils.isEmpty(val),它同时处理空字符串和null。