###前提・実現したいこと
つい先日、AndroidStudioでアプリ作成を始めたのですが、データの保存で行き詰っています。
色々なサイトを見て、自分なりにローカルファイルでのデータ保存を試してみたのですが、全く上手くいきません。
一体どうしたら良いでしょうか。
エラーメッセージは、実機に表示されるもので、AndroidStudioの方にエラーの表示はありません。
###発生している問題・エラーメッセージ
問題が発生しました。The Clickerを終了します。
###該当のソースコード
public class MainActivity extends Activity { String st_val = readFile("data.txt"); int value = Integer.parseInt(st_val); FileOutputStream outputStream; protected void onCreate(Bundle savedInstanceState) { //アプリの実行部分 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageButton mony = (ImageButton) findViewById(R.id.monybag); //monybagの定義 mony.setOnClickListener(new View.OnClickListener() { //クリックと数字の増加の処理部分 @Override public void onClick(View view) { TextView num = (TextView) findViewById(R.id.number); value = value + 1; num.setText(String.valueOf(value)); writeFile(value); } }); //増加処理ここまで } public void writeFile(int i) { //保存処理(仮) try { String string = String.valueOf(i); outputStream = openFileOutput("data.txt",Context.MODE_PRIVATE); outputStream.write(string.getBytes()); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } //保存処理ここまで public String readFile(String file) { //読み込み処理(仮) FileInputStream fileInputStream; String text = null; try { fileInputStream = openFileInput(file); String lineBuffer = null; BufferedReader reader= new BufferedReader(new InputStreamReader(fileInputStream,"UTF-8")); while( (lineBuffer = reader.readLine()) != null ) { text = lineBuffer ; } } catch (IOException e) { e.printStackTrace(); } if(text == "") { return "0"; }else{ return text; } } //読み込み処理ここまで }
###試したこと
SharedPreferencesの方も試してはみたのですが、そちらも上手くいきません。(今後の事も考えてローカルファイルで保存したいです)
おおよそ原因だと思われる部分は何度が修正やコードの追加をしてみたりしたのですが(例:readFileのreturnにif文を使って、初回の値を0で返すようにした)それも間違っているのか、別の場所が駄目なのか、全く分からなくなってしまったので、質問させていただきました。
###Logcat(追記)
Logcatというものがあったのですね。初めて知りました。
これで良いでしょうか?
11-04 23:06:06.633 26282-26282/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.clicker.akito.theclicker, PID: 26282 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.clicker.akito.theclicker/com.clicker.akito.theclicker.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileInputStream android.content.Context.openFileInput(java.lang.String)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileInputStream android.content.Context.openFileInput(java.lang.String)' on a null object reference at android.content.ContextWrapper.openFileInput(ContextWrapper.java:176) at com.clicker.akito.theclicker.MainActivity.readFile(MainActivity.java:67) at com.clicker.akito.theclicker.MainActivity.<init>(MainActivity.java:23) at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.Class.newInstance(Class.java:1606) at android.app.Instrumentation.newActivity(Instrumentation.java:1066) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 11-04 23:06:06.637 26282-26282/? I/Process: Sending signal. PID: 26282 SIG: 9
