質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

1757閲覧

Android if else else ifの分岐

toyopi_kouchan

総合スコア12

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/04/13 07:32

編集2016/04/13 07:47

ファイルの読み書きをしているプログラムです。
このプログラムは、onCreateでファイルからテキストデータがnull判定が出るまで1行づつ読み込み、それを配列に格納してedit textに表示しています。

button1にすすむと、3つのedit textの内容をonCreateで読み込んだ同じファイルに上書きで保存し,ホーム画面に移動するようにしています。

ここで、if文を使い、edit textが何も入力されていないのなら、Toastで警告を出し、すべてfalseで返されたら、ファイルを書き込んでいます。しかし、どれかがtrueになってしまったらなぜかファイルの内容が消えてしまいます。なぜでしょうか?

public class MainActivity extends Activity {

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); //button1 ボタンの取得 Button btn1 = (Button) findViewById(R.id.Button_decide); //クリックイベントの通知先指定 btn1.setOnClickListener(new button1CliclListener()); EditText editText1 = (EditText)findViewById(R.id.souti_ID); EditText editText2 = (EditText)findViewById(R.id.password); EditText editText3 = (EditText)findViewById(R.id.URL); // SDカード上のファイルパスと指定のファイル String filepath = Environment.getExternalStorageDirectory() + "/setting.txt"; String[] text = new String[1000]; try { FileInputStream fileInputStream = new FileInputStream(filepath); BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream,"UTF-8")); String str; int i = 0; while ((str = reader.readLine() ) != null) // nullまで1行づつ読み込み { text[i]=str; // 1行づつ配列に格納 i = i +1; } editText1.setText(text[0]); editText2.setText(text[1]); editText3.setText(text[2]); reader.close(); fileInputStream.close(); } catch (FileNotFoundException e) { } catch (IOException e) { } } //button1を押したときの処理(書き込み処理) private class button1CliclListener implements View.OnClickListener { @Override public void onClick(View v){ //ファイルのパスと指定のテキストファイル String filePath = Environment.getExternalStorageDirectory()+ "/setting.txt"; FileOutputStream fos; try { fos = new FileOutputStream(filePath,false); OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); BufferedWriter bw = new BufferedWriter(osw); String str1 = ((EditText) findViewById(R.id.souti_ID)).getText().toString(); String str2 = ((EditText) findViewById(R.id.password)).getText().toString(); String str3 = ((EditText) findViewById(R.id.URL)).getText().toString(); if (str1.length() == 0) { Toast.makeText(getApplicationContext(), getString(R.string.error1), Toast.LENGTH_SHORT).show(); } else if (str2.length() == 0) { Toast.makeText(getApplicationContext(), getString(R.string.error2), Toast.LEN GTH_SHORT).show(); } else if (str3.length() == 0) { Toast.makeText(getApplicationContext(),getString(R.string.error3), Toast.LENG TH_SHORT).show(); } else { bw.write(str1); bw.newLine(); bw.write(str2); bw.newLine(); bw.write(str3); bw.flush(); fos.close(); //メッセージ Toast.makeText(getApplicationContext(), "設定を保存しました。", Toast.LENGTH_LONG).show(); // ホーム画面に戻る Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); } } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

`}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Java

1fos = new FileOutputStream(filePath,false);

FileOutputStreamのコンストラクタ第2引数に
falseを指定すると上書きモードでファイルが開かれます。

多分、この時点でファイルの中身が消えてしまっていると考えられるため、

Java

1fos = new FileOutputStream(filePath,false); 2OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); 3BufferedWriter bw = new BufferedWriter(osw);

この処理を、最後のelse文の中に移動してみてください。
try-catch文も狭めて大丈夫です。

投稿2016/04/13 07:44

編集2016/04/13 07:46
abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toyopi_kouchan

2016/04/13 07:50

回答ありがとうございます!できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問