👀결과물
계산 기록을 저장하는 기능은 DB와 관련 있다.
안드로이드 스튜디오에서는 DB를 Room 라이브러리를 사용해서 이용한다.
Room에 대한 설명은 이전 포스팅을 보면 알 수 있다.

계산 기록을 보여주는 기능은 시계 모양의 버튼을 누르면 계산 기록을 포함하고 있는 레이아웃이 나타나게 했다.
💻계산기록을 나타내는 Layout

닫기 버튼과 계산 기록 삭제 버튼과 계산 기록을 보여줄 수 있는 화면은 Scrollview를 사용해서 계산 기록이 많더라도
모두 표현할 수 있게했다.
💡우선 Room을 사용하기 위해서는 3가지 구성요소를 만들어줘야 한다.
- 데이터베이스 클래스
- 데이터 항목
- Dao
📕Dao
package com.example.calculator.Dao
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import com.example.calculator.model.History
@Dao
interface HistoryDao {
@Query("SELECT *FROM history")
fun getAll(): List<History>
@Insert
fun insertHistory(history: History)
@Query("DELETE FROM history")
fun deleteAll()
📕데이터 항목
package com.example.calculator.model
import androidx.room.ColumnInfo
import androidx.room.Entity // room 사용
import androidx.room.PrimaryKey
// 데이터 클래스로 선언
@Entity
data class History(
@PrimaryKey val uid: Int?,
@ColumnInfo(name="expression") val expression: String?,
@ColumnInfo(name= "result") val result: String?
)
📕데이터베이스 클래스
package com.example.calculator
import androidx.room.Database
import androidx.room.RoomDatabase
import com.example.calculator.Dao.HistoryDao
import com.example.calculator.model.History
// 데이터 베이스가 만들어질때 히스토리 테이블을 사용하겠다고 등록
@Database(entities = [History::class], version = 1)
abstract class AppDatabase : RoomDatabase() { // 추상 클래스
abstract fun historyDao(): HistoryDao // AppDatabase 생성시 HistoryDao를 가져가서 사용할 수 있게
}
💡MainActivity.kt -DB선언
lateinit var db:AppDatabase
db= Room.databaseBuilder(
applicationContext,
AppDatabase::class.java,
"historyDB"
).build()
💻"="버튼
DB에는 계산식과 계산 결과를 넣어줬다.
Thread(Runnable {
db.historyDao().insertHistory(History(null,input_text,result_text))
}).start()
💻계산 기록 버튼
fun historyButtonClicked(v:View) {
historyLayout.isVisible= true
historyLinearLayout.removeAllViews()
Thread(Runnable {
db.historyDao().getAll().reversed().forEach{
runOnUiThread{
val historyView=LayoutInflater.from(this).inflate(R.layout.history_row,null,false)
historyView.findViewById<TextView>(R.id.txt_expression).text=it.expression
historyView.findViewById<TextView>(R.id.txt_result).text="=${it.result}"
historyLinearLayout.addView(historyView)
}
}
}).start()
}
계산기록 버튼을 누르면 gone으로 선언된 레이아웃이 보이게끔 만들어줬고, historyLinearLayout 아래에 있는 view를 모두 지웠다.(기존 계산기 버튼 화면을 지우고 새 레이아웃만 보이게 했음.)
계산 기록을 들고 올 때는 처음에 들어왔던 계산 기록과 결과를 먼저 보여주게 하기 위해서 get.All(). reversed(). forEach를 사용해서 역순으로 하나하나 들고 왔다.
그리고 history_row.xml에 들어있는 계산 기록과 결과식을 계산기록 layout에 표시해줬다.
💻계산 기록 삭제 및 닫기
fun historyClearButtonClicked(v:View){
historyLinearLayout.removeAllViews()
Thread(Runnable {
db.historyDao().deleteAll()
}).start()
}
fun closeHistoryButtonCLicked(v: View){
historyLayout.isVisible=false
}
}
계산기록 삭제를 누르면 레이아웃에 있는 계산기록 및 수식을 화면에서 지우고, 디비에서도 지웠다.
닫기 버튼을 누르면 layout이 다시 gone으로 바뀌고, 화면에는 계산기의 화면이 나오게 된다.
✔느낀 점
구글링을 하면서 많은 코드를 참고해서 만든 것이고 거의 따라 치는 느낌이었다.
안드로이드에는 굉장히 많은 기능이 있고, 모르는 것도 많고 다양한 것을 표현할 수 있다고 느꼈다.
Layout에 관한 전반적인 지식과, 코틀린 문법 및, Toast, Span, Thread에 관한 내용을 더욱 자세하게 파고 들 필요가 있을 것 같다.
💡목표
- 다양한 Layout 사용하기
- visible, invisible, gone 차이
- Thread에 대한 정확한 이해
- Room(DB) 사용 익숙해지기
- Toast, Span 등 자주 사용하는 기능 숙지
- 모든 것에 기반이 되는 코틀린 문법 공부
✋두서도 없고 정리도 안된 허접한 글이지만 봐주셔서 감사합니다.✋
전체 코드는 깃 헙 저장소에서 확인할 수 있습니다.
코드 참고:
[jhlsuper (Jamwon) - velog
Creative Coding HTML Canvas, JavaScript를 이용한 Creative Codeing 2022년 7월 24일 · 0개의 댓글 · 0
velog.io](https://velog.io/@jhlsuper)
'Skils > Android' 카테고리의 다른 글
[Android] - Layout이란 (0) | 2022.10.07 |
---|---|
[Android] 애플리케이션 기본항목 - 4대 구성요소(Component) (1) | 2022.09.23 |
[Android] - 계산기 만들기 (클론 코딩) -계산 기록 x (0) | 2022.09.17 |
[Android] Room (로컬 데이터베이스에 데이터 저장) (0) | 2022.09.03 |
[Android Studio] 계산기 어플 앱 만들기(Kotlin) #1 (0) | 2022.08.25 |
👀결과물
계산 기록을 저장하는 기능은 DB와 관련 있다.
안드로이드 스튜디오에서는 DB를 Room 라이브러리를 사용해서 이용한다.
Room에 대한 설명은 이전 포스팅을 보면 알 수 있다.

계산 기록을 보여주는 기능은 시계 모양의 버튼을 누르면 계산 기록을 포함하고 있는 레이아웃이 나타나게 했다.
💻계산기록을 나타내는 Layout

닫기 버튼과 계산 기록 삭제 버튼과 계산 기록을 보여줄 수 있는 화면은 Scrollview를 사용해서 계산 기록이 많더라도
모두 표현할 수 있게했다.
💡우선 Room을 사용하기 위해서는 3가지 구성요소를 만들어줘야 한다.
- 데이터베이스 클래스
- 데이터 항목
- Dao
📕Dao
package com.example.calculator.Dao import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert import androidx.room.Query import com.example.calculator.model.History @Dao interface HistoryDao { @Query("SELECT *FROM history") fun getAll(): List<History> @Insert fun insertHistory(history: History) @Query("DELETE FROM history") fun deleteAll()
📕데이터 항목
package com.example.calculator.model import androidx.room.ColumnInfo import androidx.room.Entity // room 사용 import androidx.room.PrimaryKey // 데이터 클래스로 선언 @Entity data class History( @PrimaryKey val uid: Int?, @ColumnInfo(name="expression") val expression: String?, @ColumnInfo(name= "result") val result: String? )
📕데이터베이스 클래스
package com.example.calculator import androidx.room.Database import androidx.room.RoomDatabase import com.example.calculator.Dao.HistoryDao import com.example.calculator.model.History // 데이터 베이스가 만들어질때 히스토리 테이블을 사용하겠다고 등록 @Database(entities = [History::class], version = 1) abstract class AppDatabase : RoomDatabase() { // 추상 클래스 abstract fun historyDao(): HistoryDao // AppDatabase 생성시 HistoryDao를 가져가서 사용할 수 있게 }
💡MainActivity.kt -DB선언
lateinit var db:AppDatabase db= Room.databaseBuilder( applicationContext, AppDatabase::class.java, "historyDB" ).build()
💻"="버튼
DB에는 계산식과 계산 결과를 넣어줬다.
Thread(Runnable { db.historyDao().insertHistory(History(null,input_text,result_text)) }).start()
💻계산 기록 버튼
fun historyButtonClicked(v:View) { historyLayout.isVisible= true historyLinearLayout.removeAllViews() Thread(Runnable { db.historyDao().getAll().reversed().forEach{ runOnUiThread{ val historyView=LayoutInflater.from(this).inflate(R.layout.history_row,null,false) historyView.findViewById<TextView>(R.id.txt_expression).text=it.expression historyView.findViewById<TextView>(R.id.txt_result).text="=${it.result}" historyLinearLayout.addView(historyView) } } }).start() }
계산기록 버튼을 누르면 gone으로 선언된 레이아웃이 보이게끔 만들어줬고, historyLinearLayout 아래에 있는 view를 모두 지웠다.(기존 계산기 버튼 화면을 지우고 새 레이아웃만 보이게 했음.)
계산 기록을 들고 올 때는 처음에 들어왔던 계산 기록과 결과를 먼저 보여주게 하기 위해서 get.All(). reversed(). forEach를 사용해서 역순으로 하나하나 들고 왔다.
그리고 history_row.xml에 들어있는 계산 기록과 결과식을 계산기록 layout에 표시해줬다.
💻계산 기록 삭제 및 닫기
fun historyClearButtonClicked(v:View){ historyLinearLayout.removeAllViews() Thread(Runnable { db.historyDao().deleteAll() }).start() } fun closeHistoryButtonCLicked(v: View){ historyLayout.isVisible=false } }
계산기록 삭제를 누르면 레이아웃에 있는 계산기록 및 수식을 화면에서 지우고, 디비에서도 지웠다.
닫기 버튼을 누르면 layout이 다시 gone으로 바뀌고, 화면에는 계산기의 화면이 나오게 된다.
✔느낀 점
구글링을 하면서 많은 코드를 참고해서 만든 것이고 거의 따라 치는 느낌이었다.
안드로이드에는 굉장히 많은 기능이 있고, 모르는 것도 많고 다양한 것을 표현할 수 있다고 느꼈다.
Layout에 관한 전반적인 지식과, 코틀린 문법 및, Toast, Span, Thread에 관한 내용을 더욱 자세하게 파고 들 필요가 있을 것 같다.
💡목표
- 다양한 Layout 사용하기
- visible, invisible, gone 차이
- Thread에 대한 정확한 이해
- Room(DB) 사용 익숙해지기
- Toast, Span 등 자주 사용하는 기능 숙지
- 모든 것에 기반이 되는 코틀린 문법 공부
✋두서도 없고 정리도 안된 허접한 글이지만 봐주셔서 감사합니다.✋
전체 코드는 깃 헙 저장소에서 확인할 수 있습니다.
코드 참고:
[jhlsuper (Jamwon) - velog
Creative Coding HTML Canvas, JavaScript를 이용한 Creative Codeing 2022년 7월 24일 · 0개의 댓글 · 0
velog.io](https://velog.io/@jhlsuper)
'Skils > Android' 카테고리의 다른 글
[Android] - Layout이란 (0) | 2022.10.07 |
---|---|
[Android] 애플리케이션 기본항목 - 4대 구성요소(Component) (1) | 2022.09.23 |
[Android] - 계산기 만들기 (클론 코딩) -계산 기록 x (0) | 2022.09.17 |
[Android] Room (로컬 데이터베이스에 데이터 저장) (0) | 2022.09.03 |
[Android Studio] 계산기 어플 앱 만들기(Kotlin) #1 (0) | 2022.08.25 |