🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1926閲覧

Kotlinでテキストファイルの保存ができません

Tomahawk

総合スコア5

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/02/02 09:38

Kotlinでフライトログをつけるアプリを目指して作っています。
ログはテキストファイルで読み書きできるようにしています。
現在編集画面をコーディングしているのですが実行してみるとテキストファイルの保存ができません。
エラーの原因は何でしょうか。アドバイスをよろしくおねがいします。

<実行時のログに表示されるエラー>
E/ANDR-PERF: IPref::tryGetService failed!

<試したこと>
print("example \n example") というように書いていたのを
println(value)
println(value2)... に書き換えた

<環境>
Android Studio 4.1.2

Kotlin

1import android.annotation.SuppressLint 2import android.app.DatePickerDialog 3import android.content.Context 4import androidx.appcompat.app.AppCompatActivity 5import android.os.Bundle 6import android.provider.CalendarContract 7import android.text.InputType 8import android.view.View 9import android.widget.Button 10import android.widget.DatePicker 11import android.widget.EditText 12import android.widget.Toast 13import java.io.OutputStream 14import java.io.OutputStreamWriter 15import java.io.PrintWriter 16import java.lang.Exception 17import java.text.SimpleDateFormat 18import java.time.Month 19import java.time.Year 20import java.util.* 21 22class WriteOrEditLog : AppCompatActivity() { 23 @SuppressLint("ShowToast") 24 override fun onCreate(savedInstanceState: Bundle?) { 25 super.onCreate(savedInstanceState) 26 setContentView(R.layout.activity_write_or_edit_log) 27 //load contents 28 val flightNumber = findViewById<EditText>(R.id.flight_number).text.toString() 29 val flightDate = findViewById<EditText>(R.id.flight_date).text.toString() 30 var aircraftModel = findViewById<EditText>(R.id.aircraft).text.toString() 31 val depICAO = findViewById<EditText>(R.id.dep_icao).text.toString() 32 var depGate = findViewById<EditText>(R.id.dep_gate).text.toString() 33 var depSchTime = findViewById<EditText>(R.id.dep_sch_time).text.toString() 34 var startTime = findViewById<EditText>(R.id.start_time).text.toString() 35 var toTime = findViewById<EditText>(R.id.to_time).text.toString() 36 var toRunway = findViewById<EditText>(R.id.to_runway).text.toString() 37 val desICAO = findViewById<EditText>(R.id.des_icao).text.toString() 38 var desGate = findViewById<EditText>(R.id.des_gate).text.toString() 39 var desSchTime = findViewById<EditText>(R.id.des_sch_time).text.toString() 40 var stopTime = findViewById<EditText>(R.id.stop_time).text.toString() 41 var ldTime = findViewById<EditText>(R.id.ld_time).text.toString() 42 var ldRunway = findViewById<EditText>(R.id.ld_runway).text.toString() 43 var routeData = findViewById<EditText>(R.id.route_data).text.toString() 44 var memo = findViewById<EditText>(R.id.memo).text.toString() 45 //load object 46 val save = findViewById<Button>(R.id.save) 47 //others 48 var mFileName: String? = null 49 50 //save action 51 save.setOnClickListener { 52 if (flightNumber.isEmpty() || flightDate.isEmpty() || depICAO.isEmpty() || desICAO.isEmpty()) { 53 Toast.makeText(this, "Input is not enough.", Toast.LENGTH_SHORT) 54 } 55 56 //generate file name 57 if (mFileName?.isEmpty() == true) { 58 val date = Date(System.currentTimeMillis()) 59 val sdf = SimpleDateFormat("yyyyMMdd_HHmmssSSS", Locale.JAPAN) 60 mFileName = sdf.format(date) + ".txt" 61 } 62 63 //detect empty form then set value "Nil" 64 if (aircraftModel.isEmpty()) {aircraftModel = "Nil"} 65 if (depGate.isEmpty()) {depGate = "Nil"} 66 if (depSchTime.isEmpty()) {depSchTime = "Nil"} 67 if (startTime.isEmpty()) {startTime = "Nil"} 68 if (toRunway.isEmpty()) {toRunway = "Nil"} 69 if (toTime.isEmpty()) {toTime = "Nil"} 70 if (desGate.isEmpty()) {desGate ="Nil"} 71 if (desSchTime.isEmpty()) {desSchTime = "Nil"} 72 if (stopTime.isEmpty()) {stopTime = "Nil"} 73 if (ldRunway.isEmpty()) {ldRunway ="Nil"} 74 if (ldTime.isEmpty()) {ldTime = "Nil"} 75 if (routeData.isEmpty()) {routeData = "Nil"} 76 if (memo.isEmpty()) {memo = "Nil"} 77 78 //save 79 val out: OutputStream? 80 val writer: PrintWriter? 81 try { 82 out = this.openFileOutput(mFileName, Context.MODE_PRIVATE) 83 writer = PrintWriter(OutputStreamWriter(out, "UTF-8")) 84 writer.run { 85 println(flightNumber) 86 println(flightDate) 87 println(aircraftModel) 88 println(depICAO) 89 println(depGate) 90 println(depSchTime) 91 println(startTime) 92 println(toRunway) 93 println(toTime) 94 println(desICAO) 95 println(desGate) 96 println(desSchTime) 97 println(stopTime) 98 println(ldRunway) 99 println(ldTime) 100 println(routeData) 101 println(memo) 102 close() 103 } 104 out.close() 105 }catch (e: Exception) { 106 Toast.makeText(this, "File save error!", Toast.LENGTH_LONG).show() 107 } 108 } 109 110 } 111}

字数制限のためレイアウトファイルはこちら(GoogleDrive)にあります。

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

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

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

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

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

hoshi-takanori

2021/02/02 11:10

openFileOutput の実態がないのでどうやってファイルを開いてるか不明ですが、モバイル環境ではファイルを書き込める場所に制約があるので、適切な保存先かどうかご確認ください。
hoshi-takanori

2021/02/02 18:10

あ、ごめんなさい。openFileOutput はアプリ固有の内部ストレージに書き込むやつでしたね。なら成功するはず…。と思ってよく見たら、mFileName が null ですね。if (mFileName?.isEmpty() == true) { としてますが、mFileName が null なので isEmpty() == true にはなりません。
Tomahawk

2021/02/03 08:50 編集

その部分は下のサイトを参考にしているのですが、Javaでのクラスのメンバに追加する動作がkotlinでどうなるのかがいまいちわからず、とりあえずエラーが消えるように書いていました。表現の仕方を教えていただけませんか? https://androidguide.nomaki.jp/html/memo_app/memo_app_save.html
hoshi-takanori

2021/02/03 08:56

isEmpty は空文字列 ("") かどうかを調べるメソッドですが、mFileName?. isEmpty() としているので null の場合はそもそも呼ばれません。isEmpty は "" になることはないはずなので、条件としては if (mFileName != null) { で良いのでは。
guest

回答1

0

自己解決

試してみましたがやはりうまくいきませんでした。
タイムスタンプによる命名を目指していましたが諦めてEditTextから取得した値でmFileNameを設定してみたところうまく行ったのでその方向で進めようと思います。

投稿2021/02/03 12:53

Tomahawk

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問