【发布时间】:2017-03-04 16:05:21
【问题描述】:
所以我正在尝试制作我的第一个 Android 应用。目前它只是一个简单的计数计数器,但我遇到了一个奇怪的错误。
你看,我有一个简单的保存和加载功能,一个递增、递减和重置按钮。和一个 TextView 一起显示值(见下文)。
现在,当我将值增加到 10 并关闭应用程序时,它会按原样保存,当我再次打开应用程序时,它确实会返回 10。但是,当我随后增加到 30 或 100 ,关闭并重新启动该值不会粘住,而是显示为 -1 或完全不同的值。
会发生什么?
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
int value;
TextView textView_value;
final String filename = "tallyCountPlus";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadValue(filename);
textView_value = (TextView) findviewById(R.id.textView_value);
textView_value.setText(Integer.toString(value));
}
/** Called when the user presses the increment button */
public void incValue(View view) {
value++;
textView_value.setText(Integer.toString(value));
}
/** Called when the user presses the decrement button */
public void decValue(View view) {
if (value > 0) {
value--;
}
textView_value.setText(Integer.toString(value));
}
/** Called when the user presses the reset button */
public void resetValue(View view) {
value = 0;
textView_value.setText(Integer.setString(value));
}
@Override
public void onPause() {
super.onPause();
saveValue(filename, Context.MODE_PRIVATE);
}
@Override
public void onResume() {
super.onResume();
loadValue(filename);
textView_value.setText(Integer.toString(value));
}
public void onDestroy() {
super.onDestroy();
saveValue(filename, Context.MODE_PRIVATE);
}
private void loadValue(String name) {
try {
FileInputStream fis = openFileInput(name);
value = fis.read();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void saveValue(String name, int context) {
try {
FileOutputStream fos = openFileOutput(name, context);
fos.write(value);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
有人知道我的问题可能是什么吗?
谢谢。
杰米。
编辑:
所以我认为我已经通过以下方式修复了这个错误:
private void loadValue(String filename) {
/* this is wrapped in a try-catch statement */
FileInputStream fis = openFileInput(name);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
StringBuilder = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
value = Integer.parseInt(sb.toString());
fis.close() /* Not sure if this is actually neccessary? */
if (value == -1) {
value = 0;
}
}
private void saveValue(String name) {
/* This is also wrapped in a try-catch statement */
FileOutputStream fos = openFileOutput(name, Context.MODE_PRIVATE);
String data = Integer.toString(value);
fos.write(data.getBytes());
fos.close();
}
在输入几个值之后,它似乎工作正常。但是,我不确定它是追加还是删除先前的值并替换它...我宁愿后者以防止保存文件变得太大。
【问题讨论】:
-
检查你是否提供了外部写权限
-
我不需要外部写入权限,因为我使用的是内部存储,而不是外部存储。
标签: java android integer save loading