4 回答
TA贡献1826条经验 获得超6个赞
getSharedPreferences()您在实际创建之前调用Activity。您需要初始化SharedPreferencesin onCreate():
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPreferences = this.getSharedPreferences("com.example.hugelon", Context.MODE_PRIVATE); // Here, this is initialized AFTER super.onCreate
...
}
Activity延伸自Context且 是Context所需要的SharedPreferences。我建议您在这里阅读有关 Android 活动生命周期的信息:
https://developer.android.com/guide/components/activities/activity-lifecycle
为了证明该值确实被保存,您可以尝试使用以下代码来测试保存的值:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPreferences = this.getSharedPreferences("com.example.hugelon", Context.MODE_PRIVATE); // Here, this is initialized AFTER super.onCreate
int storedValue = sharedPreferences.getInt("hugcounter", 0);
Toast.makeText(this, "Saved value: " + storedValue, Toast.LENGTH_LONG).show();
}
并且,不要忘记通过调用来存储值apply():
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("hugcounter", counterint);
editor.apply();
TA贡献1811条经验 获得超4个赞
你只是没有在 oncreate 设置初始值
public class MainActivity extends AppCompatActivity {
int counterint;
TextView counter;
String stringnumber;
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
counter = findViewById(R.id.countertv);
sharedPreferences = this.getSharedPreferences("com.example.hugelon", Context.MODE_PRIVATE);
stringnumber=String.valueOf(sharedPreferences.getInt("hugcounter", 0));
counter.setText(stringnumber);
}
public void hughim(View view){
counter = findViewById(R.id.countertv);
stringnumber = counter.getText().toString();
counterint = Integer.parseInt(stringnumber);
counterint++;
counter.setText(Integer.toString(counterint));
sharedPreferences.edit().putInt("hugcounter", counterint);
}
}
TA贡献1820条经验 获得超2个赞
SharedPreferences 在初始化之前需要一个活动引用,这就是thisin 的目的:
SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.hugelon", Context.MODE_PRIVATE);
您的代码的问题是this在您初始化 SharedPreferences 对象时它为空。这样做的原因是它this在onCreate(). 因此,一个快速的解决方案是将 SharedPreferences 对象的初始化移动到 onCreate 中。这是您的课程之后的样子的片段:
public class MainActivity extends AppCompatActivity {
int counterint;
TextView counter;
String stringnumber;
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedPreferences = this.getSharedPreferences("com.example.hugelon", Context.MODE_PRIVATE);
sharedPreferences.getInt("hugcounter", 0);
}
}
附录:
将 的值sharedPreferences.getInt("hugcounter", 0)放入变量中,如下所示:
int myValue = sharedPreferences.getInt("hugcounter", 0);
我希望这有帮助。编码愉快!
TA贡献1827条经验 获得超8个赞
在 onCreate 方法中初始化 SharedPreference
您尝试将 Int 放入 SharedPreference 但没有保存它,因为您需要调用
sharedPreferences.edit().putInt("hugcounter", counterint).apply()
或者
sharedPreferences.edit().putInt("hugcounter", counterint).commit()
为了这个目的。因此使用commit()
或apply()
保存在本地存储中。
添加回答
举报