我想为2个活动存储一个int,在第一个被加载的时候和在另一个活动中存储(并加载以进行比较,如果它仍然相同)。
活动A:
textView = (TextView) findViewById(R.id.score);
SharedPreferences preferences = getSharedPreferences("Pref", 0);
int score = preferences.getInt("Highscore", 0);
textView.setText(Integer.toString(score));
活动B(在onPause()部分):
SharedPreferences preferences = getSharedPreferences("Pref", 0);
int pref_score = preferences.getInt("Highscore", 0);
if (new_score > pref_score) {
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("Highscore", gameView.getScore());
editor.commit();
}
当我运行应用程序时,它会立即崩溃。活动A首先被调用,到目前为止没有任何存储可能是一个问题? 如果我在活动A中对它进行注释,它将一直有效,直到B中的onPause()函数被调用(Home Button)。
修改 将all更改为int,仍然崩溃logcat
答案 0 :(得分:1)
您正在使用" putString"和" getInt"。
所以你把它保存为String,但试着把它作为一个Integer。因此它尝试将String转换为Int,即ClassCastException。
您必须保存并将其作为相同的类型。
答案 1 :(得分:1)
在Activity A
中preferences.getInt()
Activity B
使用preferences.edit().putString()
时使用String
。
修复此问题后,您必须卸载/重新安装您的应用或覆盖SharedPreference
中包含的getInt()
值,否则当您尝试通过const express = require('express');
const bodyParser = require('body-parser');
const mustacheExpress = require('mustache-express');
const pgp = require('pg-promise');
const port = process.env.PORT || 3000;
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.engine('html', mustacheExpress());
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/public'));
const students = require('./controllers/students.js');
const houses = require('./controllers/houses.js');
app.use('/houses', houses);
app.use('/students', students);
app.get('/', (req, res) => res.render('home/index'));
app.listen(port, () => { console.log("Server started on " + port); });
module.exports = router;
时它仍然会崩溃1}}。