前提・実現したいこと
プログラミング初心者です。Android studio 3.5.1を使っています。
アンケートに使用するツールとしてアプリを作りたいと思っています。
シークバーを操作してもらい、その値を1秒間隔等の時刻とセットでcsvファイルに保存したいです。
発生している問題・エラーメッセージ
このサイトや他のサイトを参考にして作り始めて丸3日が経ちました。
コピペ等でなんとかシークバー等の配置ができましたが、
保存用ファイルが作成されません。(どこに作られたかがわかっていません。)
現時点ではシークバー1を操作すると強制終了します。
該当のソースコード
kotlin
1@file:Suppress("UNREACHABLE_CODE", "DEPRECATION") 2 3package com.example.myapplication 4 5import android.content.pm.PackageManager 6import android.os.Build 7import android.os.Bundle 8import android.os.Environment 9import android.widget.SeekBar 10import androidx.annotation.RequiresApi 11import androidx.appcompat.app.AppCompatActivity 12import kotlinx.android.synthetic.main.activity_main.* 13import java.io.BufferedWriter 14import java.io.FileWriter 15import java.io.PrintWriter 16 17@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS") 18class MainActivity : AppCompatActivity() { 19 20 @RequiresApi(Build.VERSION_CODES.M) 21 override fun onCreate(savedInstanceState: Bundle?) { 22 // パーミッション未許可の時 23 if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || 24 checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 25 // パーミッションの許可ダイアログの表示 26 requestPermissions( 27 arrayOf( 28 android.Manifest.permission.WRITE_EXTERNAL_STORAGE, 29 android.Manifest.permission.READ_EXTERNAL_STORAGE 30 ), 0 31 ) 32 } 33 super.onCreate(savedInstanceState) 34 setContentView(R.layout.activity_main) 35 //シークバー1のデータ取得 36 seekBar1.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { 37 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { 38 val sens1: Int = progress 39 val sens1list: ArrayList<Int> = ArrayList() 40 textView5.text = sens1.toString() //テキストに出力 41 //新規ファイル作成 42 val fw = FileWriter(Environment.getExternalStorageDirectory().getPath() + "/measured.csv") 43 //書き出し 44 val pw = PrintWriter(BufferedWriter(fw)) 45 pw.print("sens1") 46 pw.print(sens1list) 47 pw.println() 48 pw.close() 49 } 50 override fun onStartTrackingTouch(seekBar: SeekBar) {} 51 override fun onStopTrackingTouch(seekBar: SeekBar) {} 52 }) 53 //シークバー2のデータ取得 54 seekBar2.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { 55 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { 56 val sens2: Int = progress 57 textView8.text = sens2.toString() //テキストに出力 58 } 59 override fun onStartTrackingTouch(seekBar: SeekBar) {} 60 override fun onStopTrackingTouch(seekBar: SeekBar) {} 61 }) 62 //シークバー3のデータ取得 63 seekBar3.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { 64 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { 65 val sens3: Int = progress 66 textView9.text = sens3.toString() //テキストに出力 67 } 68 override fun onStartTrackingTouch(seekBar: SeekBar) {} 69 override fun onStopTrackingTouch(seekBar: SeekBar) {} 70 }) 71 //シークバー4のデータ取得 72 seekBar4.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { 73 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { 74 val sens4: Int = progress 75 textView4.text = sens4.toString() //テキストに出力 76 } 77 override fun onStartTrackingTouch(seekBar: SeekBar) {} 78 override fun onStopTrackingTouch(seekBar: SeekBar) {} 79 }) 80 } 81} 82 83
Androidmanifest
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.myapplication"> 4 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 5 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 6 7 <application 8 android:allowBackup="true" 9 android:icon="@mipmap/ic_launcher" 10 android:label="@string/app_name" 11 android:roundIcon="@mipmap/ic_launcher_round" 12 android:supportsRtl="true" 13 android:theme="@style/AppTheme"> 14 <activity android:name=".MainActivity"> 15 <intent-filter> 16 <action android:name="android.intent.action.MAIN" /> 17 18 <category android:name="android.intent.category.LAUNCHER" /> 19 </intent-filter> 20 </activity> 21 </application> 22 23</manifest>
試したこと
getExternalStorageDirectoryが非推奨らしいので他の方法も試しましたがよくわからず、現在の状態に戻しています。
補足情報(FW/ツールのバージョンなど)
参考にしたウェブページ
https://teratail.com/questions/168541
https://akira-watson.com/android/external-storage-file.html
あなたの回答
tips
プレビュー