0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Androidアプリ1月目の練習成果

Posted at

参考書

・Androidアプリ開発の教科書Kotlin対応
・Kotlinスタートブック

作成しているアプリ

Androidアプリの勉強で今は、出勤管理アプリを作成しています。

今後

・Fragmentの使い方を学ぶ。現状使っていない。
・DB接続にRoomを用いているが、ViewModelは用いていないので、使う。
・お試しのため、画面からデータを取得しておらず、直接挿入している、画面かた取得して挿入するようにする。
・取得したデータが画面に表示さない。

アドバイス助言お待ちしてます。

データ取得したリストがなぜ画面に表示できないか教えてください

現状できているコード

MainActivity.kt
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //時刻取得
        val date = Date()
        val format = SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault())
        val input = findViewById<TextView>(R.id.nowTime)
        input.text = format.format(date)

        //退勤ボタンオブジェクト取得
        val btLeave = findViewById<Button>(R.id.btLeave)
        //出勤ボタンオブジェクト取得
        val btAttendance = findViewById<Button>(R.id.btAttendance)
        //実績ボタンオブジェクト取得
        val buttonResult = findViewById<Button>(R.id.btResult)
    }

    override fun onStart() {
        super.onStart()
    }

    override fun onResume() {
        super.onResume()
    }

    //退勤ボタンがタップされた時の処理メソッド
    fun onLeaveClick(view: View){
        //timeオブジェクト取得
        val timer = findViewById<Chronometer>(R.id.chronometer)

        //resultTimeオブジェクト取得
        val resulttime = findViewById<TextView>(R.id.resultTime)
        resulttime.setText(timer.text.toString())
        timer.stop()
        //出勤ボタン押せるようにする
        btAttendance.isEnabled = true
        //退勤ボタン押せないようにすうる
        btLeave.isEnabled = false
    }

    //出勤ボタンがタップされた時の処理メソッド
    fun onAttendanceClick(view: View){
        //退勤ボタン押せるようにする
        btLeave.isEnabled = true
        //timeオブジェクト取得
        val timer = findViewById<Chronometer>(R.id.chronometer)
        //退勤ボタンを押せるようにする
        btLeave.isEnabled = true
        //出勤ボタン押せるようにする
        btAttendance.isEnabled = false
        //timeスタート
        timer.start()
    }

    //実績ボタンを押したら実績ページに遷移する
    fun onResultClick(view: View){
        //インテントオブジェクトを生成
        val intent = Intent(applicationContext, ResultActivity::class.java)
        //画面遷移
        startActivity(intent)
    }

    override fun onDestroy() {
        super.onDestroy()
    }
}
    }
}

ResultActivityでデータ取得を行います。

ResultActivity.kt
class ResultActivity : AppCompatActivity() {
    companion object {
        lateinit var database: ResultRoomDatabase
    }
    data class ViewHolder(val resultView: ListView)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.result)

        //戻るオブジェクト取得
        val btBack = findViewById<Button>(R.id.btBack)
    }

   override fun onResume(){
        super.onResume()

        //ListViewオブジェクト作成
        val result = findViewById<ListView>(R.id.result)
        
        database = Room.databaseBuilder(this, ResultRoomDatabase::class.java, "kotlin_room_sumple.db").build()

        GlobalScope.launch(Dispatchers.Main) {
            val dao = database.resultDao()
            dao.delete(Result(40, "09:00", "17:30", 8, "2020/01/23", 2))
            dao.insertAll(Result(40, "09:00", "17:30", 8, "2020/01/23", 2))
            val id = dao.getId()
            val arrayAdapter: ArrayAdapter<Result> =
                ArrayAdapter(this@ResultActivity, android.R.layout.simple_list_item_1, id)

            result.adapter = arrayAdapter
        }
    }
 
  fun onBack(view: View){
        finish()
    }

    override fun onDestroy() {
        super.onDestroy()
    }
}
ResultDao.kt
@Dao
interface ResultDao {
    @Query("select * from result")
    suspend fun getAll(): List<Result>
    @Insert
    suspend fun insertAll(results: Result)
    @Delete
    suspend fun delete(result: Result)
    @Query("select version from result")
    suspend fun getId(): Int
}
Result.kt
@Entity(tableName = "result")
data class Result (
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "start-time") val startTime: String?,
    @ColumnInfo(name = "end-time") val endTime: String?,
    @ColumnInfo(name = "time") val time: Int?,
    @ColumnInfo(name = "date") val date: String?,
    @ColumnInfo(name = "version") val version: Int
)
AppDatabase.kt
@Database(entities = arrayOf(Result::class), version = 1, exportSchema = false)
    public abstract class ResultRoomDatabase : RoomDatabase(){
    abstract fun resultDao(): ResultDao

    companion object {
        @Volatile
        private var INSTANCE: ResultRoomDatabase? = null

        fun getDatabase(context: Context): ResultRoomDatabase{
            val tempInstance = INSTANCE
            if(tempInstance != null){
                return tempInstance
            }
            @UseExperimental(kotlinx.coroutines.InternalCoroutinesApi::class)
            synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    ResultRoomDatabase::class.java,
                    "result_database").build()
                INSTANCE = instance
                return instance
            }
        }
    }
}
result.xml
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="54dp"
        android:layout_marginBottom="42dp"
        android:onClick="onBack"
        android:text="@string/bt_back"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="29dp"
        android:layout_marginTop="24dp"
        android:text="今月の勤怠"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/result"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="132dp"
        android:layout_marginBottom="90dp"
        app:layout_constraintBottom_toTopOf="@+id/btBack"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        android:textSize="40dp"
        android:layout_weight = "0.6"/>
</androidx.constraintlayout.widget.ConstraintLayout>
activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/nowTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="35dp"
        android:text="@string/nowTime"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Chronometer
        android:id="@+id/chronometer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="182dp"
        android:layout_marginTop="206dp"
        android:layout_marginEnd="182dp"
        android:text="@string/chronometerText"
        android:textSize="36sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btLeave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="30dp"
        android:layout_marginTop="200dp"
        android:text="@string/bt_leave"
        app:layout_constraintEnd_toStartOf="@+id/btResult"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btAttendance"
        app:layout_constraintTop_toBottomOf="@+id/chronometer"
        android:onClick="onLeaveClick"
        android:enabled="false"/>

    <Button
        android:id="@+id/btAttendance"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="200dp"
        android:onClick="onAttendanceClick"
        android:text="@string/bt_attendance"
        app:layout_constraintEnd_toStartOf="@+id/btLeave"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/chronometer" />

    <Button
        android:id="@+id/btResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="30dp"
        android:layout_marginTop="200dp"
        android:layout_marginEnd="71dp"
        android:text="@string/bt_result"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btLeave"
        app:layout_constraintTop_toBottomOf="@+id/chronometer"
        android:onClick="onResultClick"/>

    <Button
        android:id="@+id/btRest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="41dp"
        android:text="@string/bt_rest"
        app:layout_constraintEnd_toStartOf="@+id/btClear"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btAttendance"
        android:onClick="onResultViewClick"/>

    <Button
        android:id="@+id/btClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="30dp"
        android:layout_marginTop="41dp"
        android:text="@string/bt_clear"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btRest"
        app:layout_constraintTop_toBottomOf="@+id/btLeave" />

    <TextView
        android:id="@+id/resultTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginTop="131dp"
        android:text="@string/resultTimeText"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/resultView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="44dp"
        android:layout_marginTop="86dp"
        android:text="@string/resultText"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/resultTime" />
</androidx.constraintlayout.widget.ConstraintLayout>

実機操作

sam.gif

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?