일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- build
- 스튜디오
- 웹뷰
- Github
- 의존성주입
- viewpager
- 안드로이드스튜디오
- Retrofit
- 유튜브
- dart
- 코루틴
- Kotlin
- error
- studio
- Gradle
- 깃헙
- RecyclerView
- 에러
- image
- 레트로핏
- 안드로이드
- MVVM
- 코틀린
- 안드로이드 스튜디오
- 안스
- ADB
- Android
- WebView
- GIT
- coroutine
- Today
- Total
목록전체 글 (164)
코딩하는 일용직 노동자
RecyclerView Adapter Boilerplate Code #1 기본적인 어댑터 import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.ViewHolder class MyAdapter: RecyclerView.Adapter() { private var context: Context? = null override fun onCreateViewHolder(parent:..
안드로이드 스튜디오 4.0 버전에서 업데이트된 Live Layout Inspector 기능을 살펴보겠습니다. 기존 3.1버전에서부터 Layout Inspector 기능이 있었고 이번에 업데이트가 되었습니다. 레이아웃의 계층구조를 3D로 살펴볼 수 있는 비슷한 기능을 iOS 개발하는 XCode에서 본적이 있는데 안드로이드 개발에서도 이용할 수 있게 되었습니다. Layout Inspector 창은 View > Tools Windows > Layout Inspector를 선택하면 사용할 수 있습니다. 우선 테스트 기기를 컴퓨터와 연결하거나 에뮬레이터를 작동시키고 디버그할 앱을 실행합니다. 그리고 [+Select Process]를 누르면 디버그할 앱을 선택할 수 있습니다. 레이아웃의 구조도 쉽게 표시가 되고, ..
안드로이드 9.0 Pie 부터는 https만 사용하도록 강제합니다. 만약 http로 연결을 시도하면 아래의 에러문구를 보실 수 있습니다. CLEARTEXT communication to XXXX not permitted by network security policy 하지만 개발중에 접속하는 서버가 https 만으로 구성된 경우는 드믑니다. 이를 해결하기 위한 방법이 있습니다. #1 targetSdk 버전을 28보다 작게 설정하면됩니다. 하지만 이것은 좋은 방법은 아닙니다. 언젠가는 올려야 하니까요. #2 usesCleartextTraffic 을 true로 설정하면됩니다. 안드로이드 매니페스트 파일에 이렇게 설정을 합니다. 이러면 http 로도 연결이 됩니다. 편리한 방법이긴 합니다만 정식 마켓등록하는 ..
안드로이드 스튜디오가 4.0버전으로 정식 업데이트 되었습니다. gradle에서 데이타 바인딩을 이용하기 위한 설정 방법이 바뀌었습니다. 기존에는 dataBinding { enabled = true } 이렇게 설정해서 사용했지만 안드로이드 스튜디오 4.0 부터는 이렇게 설정하면 DSL element 'android.dataBinding.enabled' is obsolete and has been replaced with 'android.buildFeatures.dataBinding'. 빌드시 이런 에러가 발생합니다. 앞으로는 buildFeatures { dataBinding = true } 이렇게 설정하셔야 합니다.
안드로이드 앱을 릴리즈 버전으로 빌드하려니 30분이 넘도록 빌드를 하는 현상이 있었습니다. 빌드 로그를 보니 아래의 메세지가 반복적으로 표시되었습니다. Expiring Daemon because JVM heap space is exhausted 안드로이드 스튜디오의 heap memory 가 부족한듯 합니다. 사용할 수 있는 메모리를 더 높게 설정해보겠습니다. Preferences(Settings) > Memory Settings 메뉴에서 설정할 수 있습니다.
#1 기존 이용했던 식별자 정보 안드로이드 10 이전에는 기기의 고유 식별자정보를 얻기가 쉬웠습니다. 이 정보를 이용해 중복로그인을 막는다던지 1계정에 1기기로만 서비스 되도록 한는 처리가 가능했습니다. 주로 아래의 기기 식별자정보를 사용했습니다. 기기 시리얼 번호 Build.getSerial() 디바이스 ID TelephonyManager.getDeviceId() 유심 시리얼 넘버 TelephonyManager.getSimSerialNumber() IMEI TelephonyManager.getImei() MEID TelephonyManager.getMeid() 하지만!! 안드로이드 10(Q) 버전부터는 보안정책이 변경되어서 이 정보들을 얻을 수 없게되었습니다. OS가 10 버전 이상인 기기에서는 위의 ..
생성자 없이 ViewModel을 만들어 사용하는 것은 매우 간단합니다. 하지만 ViewModel을 이용하다보면 repository 나 인스턴스들을 파라메터로 넘겨서 생성하는 경우가 많습니다. 일단 간단히 name을 전달하는 ViewModel을 만들어 테스트 해보겠습니다. class ViewModelActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_view_model) try { var viewModel = ViewModelProvider(this).get(MyViewModel::cl..
MVVM 으로 개발할때 ViewModel은 View를 몰라야 합니다. (ViewModel을 만들고 사용하는 activity가 자신의 context를 넘겨주거나 하지 않습니다.) 때문에 ViewModel에서 View로 이벤트나 결과를 전달할 경우에는 View가 ViewModel을 observe 하다가 상태가 변하면 그에따른 처리를 하게 합니다. // ViewModel var resetList = MutableLiveData().apply { value = false } ... /** * Search 버튼 클릭 처리. */ fun onClickSearch() { if (!TextUtils.isEmpty(etStr)) { mPage = 1 resetList.value = true searchImage(etSt..
레이아웃을 수정한 후 앱을 재시작해보니 곧바로 죽는 현상이 발생했습니다. 로그를 보니 아래와 같은 에러메세지를 볼 수 있었습니다. All children of ConstraintLayout must have ids to use ConstraintSet 내용을 보니 ConstraintLayout 에서는 child layout 에 id가 항상 지정이 되어 있어야 한다는 것이었습니다. 소스를 보니 새로 추가한 레이아웃에 id가 지정이 안되어 있었고, id를 만들어주니 에러는 곧바로 해결됐습니다.
Kotlin Collections function fun get(index: Int): E 인덱스의 항목을 반환 fun clear() 모든 항목을 제거 fun indexOf(element: E): Int 지정된 항목의 인덱스를 반환 fun isEmpty(): Boolean 컬렉션이 비어있는지 반환 fun contains(element: E): Boolean 지정된 항목이 컬렉션에 포함되어 있는지 반환 fun subList(fromIndex: Int, toIndex: Int): List 시작 인덱스부터 끝 인덱스 -1 까지의 범위의 리스트를 반환 fun Iterable.all(predicate: (T)->Boolean): Boolean 모든 항목이 지정된 조건에 만족할 경우 true 반환 ex) list...