그래서 처음으로 Android 앱을 만들려고합니다. 지금은 단순한 집계 계산 카운터이지만 이상한 버그를 발견했습니다.android app를 만드는 이상한 버그
간단한 저장 및로드 기능, 증가, 감소 및 재설정 버튼이 있습니다. 값을 모두 표시하는 TextView가 있습니다 (아래 참조).
값을 10으로 늘리고 앱을 닫을 때 저장해야하며 앱을 다시 열 때 다시 10이됩니다. 그러나 30이나 100을 닫고 다시 시작하면 값이 달라 지거나 완전히 다른 값으로 나옵니다.
어떤 일이 벌어 질 수 있습니까?
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();
}
그리고 값의 몇 퍼팅 후
, 잘 작동하는 것 같다 : 그래서 내가 수행하여 버그를 수정했습니다 생각합니다. 그러나 이전 값을 추가하거나 삭제하고 대체하는지 여부를 확신 할 수 없습니다 ... 저장 파일이 너무 커지지 않게하려면 후자를 사용하는 것이 좋습니다.
외부 쓰기 권한을 제공했는지 확인하십시오. – Nithinlal
외부 저장소가 아닌 내부 저장소를 사용하고 있으므로 외부 쓰기 권한이 필요하지 않습니다. –