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()
保存在本地存儲中。
添加回答
舉報