1. Android 앱개발 심화 개인과제
어제는 문제점들만 여럿 드러나고 해결은 하나도 못 했었는데 오늘은 개선점이 있을지 한 번 살펴보자.
문제해결
○ SharedPreference
어제 SharedPreference를 프래그먼트에 사용하려고 보니 액티비티에서 쓸 수 있는 기능이어서 액티비티에서 작업하고 프래그먼트로 데이터를 옮길지 말지 고민하고 있었는데 오늘 그 해결법을 찾아냈다.
결론부터 말하자면, 프래그먼트에서도 저 SharedPreference를 사용할 수 있다!
프래그먼트에서 사용하려면 Preference 앞에 단어 하나만 붙이면 된다.
val pref = requireActivity().getSharedPreferences("pref", 0)
그리고 액티비티에서 사용했던 그대로 프래그먼트에 적용시키면 된다.
private fun saveData() {
val pref = requireActivity().getSharedPreferences("pref", 0)
val edit = pref.edit()
edit.putString("name", binding.etSearch.text.toString())
edit.apply()
}
private fun loadData() {
val pref = requireActivity().getSharedPreferences("pref", 0)
binding.etSearch.setText(pref.getString("name", ""))
}
○ Glide
어제 Adapter 부분에서 Image url 부분이 뭔가 이상하다고 생각했었는데 찾아보니 Android Studio에는 url을 이미지로 보여주는 기능이 있었다.
그것이 바로 Glide.
우선, Glide를 사용하려면 build.gradle에 가서 dependencies에 glide를 추가해야 한다.
implementation("com.github.bumptech.glide:glide:4.13.2")
annotationProcessor("com.github.bumptech.glide:compiler:4.13.2")
그리고 Adapter에 가서 Glide를 사용하면 된다.
//Glide를 통한 Image URI 형식 받기
Glide.with(holder.itemView.context)
.load(mItems[position].thumbnail_url)
.into(holder.itemImage)
○ Retrofit 프래그먼트에 연결하기
이게 가장 중요하고도 어려운 부분이었다.
일단 Retrofit부터 어렵기도 어려운데 또 적용시키려다보니 오류투성이였는지 앱이 꺼져버리더라...
처음에 API를 요청하는 함수를 적었다.
private fun callKakaoKeyword(keyword: String, size: Int) {
searchNetwork.getSearchResult(query = keyword, size = size)
.enqueue(object : Callback<Search> {
override fun onResponse(call: Call<Search>, response: Response<Search>) {
val body = response.body()
body?.let {
items.addAll(it.documents!!)
}
adapter.notifyDataSetChanged()
Log.d("api검사", "$items")
}
override fun onFailure(call: Call<Search>, t: Throwable) {
Log.d("api검사", "네트워크 오류 / 데이터변환 오류.")
}
})
}
그리고 검색 버튼을 클릭하면 이 함수가 적용이 되게끔 onViewCreated 함수에 위의 API 요청 함수를 집어넣었다.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
with(binding) {
val adapter = SearchAdapter(items)
recyclerview.adapter = adapter
recyclerview.layoutManager = GridLayoutManager(context, 2)
btnSearch.setOnClickListener {
val keyword = etSearch.text.toString()
callKeyword(keyword, size = 80)
}
}
}
그렇게 돌려본 결과, 처음에 앱을 켰을 때는 아무런 문제가 없다가 검색 버튼을 뙇 누르면 거짓말같이 앱이 종료된다.
분명 저것들 중에 뭔가가 잘못됐다는 이야기인데 과연 뭐가 잘못됐을까?
역시 Retrofit…. 어려울 거라고는 미리 생각했었지만, 이렇게까지 어려울 줄은 생각도 못했다.
그나마 어제는 코드 짜는 것도 생각이 안나서 멘탈이 와자작 깨졌는데 오늘은 그래도 코드는 짰으니까 다행이라고 해야하나.
게다가 아직 Main에서 클릭하면 좋아요 표시가 생기고, 좋아요 표시가 생긴 이미지를 MyPage에 출력하는 기능은 시작도 못했다. 어휴;; 산 넘어 산이로구나.
과연 시간 안에 과제를 내 힘으로 완료할 수 있을까…?
'[TIL][내일배움캠프]' 카테고리의 다른 글
[내일배움캠프][TIL] 24.02.01 (목) - Android 앱개발 심화 개인과제 : 좋아요 기능 추가 (1) | 2024.02.01 |
---|---|
[내일배움캠프][TIL] 24.01.31 (수) - Android 앱개발 심화 개인과제 : Retrofit 3트, 그 결과 (1) | 2024.01.31 |
[내일배움캠프][TIL] 24.01.29 (월) - Android 앱개발 심화 개인과제 : Retrofit (1) | 2024.01.29 |
[내일배움캠프][TIL] 24.01.26 (금) - Android 앱개발 심화 개인과제 : 카카오 API / UI 기초작업 (1) | 2024.01.26 |
[내일배움캠프][TIL] 24.01.25 (목) - Android 앱개발 심화 - 앱 개발 프로세스 / 디버깅 (1) | 2024.01.25 |