4 回答

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
getSharedPreferences()您在實(shí)際創(chuàng)建之前調(diào)用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。我建議您在這里閱讀有關(guān) Android 活動(dòng)生命周期的信息:
https://developer.android.com/guide/components/activities/activity-lifecycle
為了證明該值確實(shí)被保存,您可以嘗試使用以下代碼來(lái)測(cè)試保存的值:
@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();
}
并且,不要忘記通過(guò)調(diào)用來(lái)存儲(chǔ)值apply():
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("hugcounter", counterint);
editor.apply();

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
你只是沒(méi)有在 oncreate 設(shè)置初始值
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貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊
SharedPreferences 在初始化之前需要一個(gè)活動(dòng)引用,這就是thisin 的目的:
SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.hugelon", Context.MODE_PRIVATE);
您的代碼的問(wèn)題是this在您初始化 SharedPreferences 對(duì)象時(shí)它為空。這樣做的原因是它this在onCreate(). 因此,一個(gè)快速的解決方案是將 SharedPreferences 對(duì)象的初始化移動(dòng)到 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貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
在 onCreate 方法中初始化 SharedPreference
您嘗試將 Int 放入 SharedPreference 但沒(méi)有保存它,因?yàn)槟枰{(diào)用
sharedPreferences.edit().putInt("hugcounter",?counterint).apply()
或者
sharedPreferences.edit().putInt("hugcounter",?counterint).commit()
為了這個(gè)目的。因此使用commit()
或apply()
保存在本地存儲(chǔ)中。
添加回答
舉報(bào)