분류 전체보기: 247개의 글
들어가며 안드로이드에서 코딩을 하다보면 앱이 종료되도 값을 저장해 유지해야 할때가 많습니다. 만약 앞으로 설명해야 할 SharedPreference가 없다면, 파일입출력을 통해서 데이터를 저장을 해야하는 번거로움이 있습니다. 파일 입출력 없이 간단한 데이터를 Key, Value로 저장할 수 있다면 쓰기/읽기가 수월할 것입니다. 사용 예로는 안드로이드에서 Setting값을 항상 내가 설정한 값으로 유지해야하는 경우가 있는데, 이때 SharedPreference를 사용하면 문제를 쉽게 해결 할 수 있습니다. 하지만 앱을 제거 후 새로 설치되면 SharedPreference의 값은 초기화가 됩니다. 사용방법 SharedPreferences는 안드로이드에서 제공하고 있습니다. Context를 통해서 값을 가져올..
들어가며 프로젝트 IDE로 IntelliJ를 사용하는 개발자들은 많을 것이다. 갑자기 'cannot resolve symbol' 이라는 에러와 함께 import가 되지 않는 현상이 나왔습니다. 'File size exceeds configured limit' 의 에러는 코드 사이즈가 제한을 초과했다는 말을 나타냅니다. 저 같은 경우에는 Google Protobuf에서 자동으로 생성되는 코드의 용량이 너무 커서 생겼습니다. 해결방법 문제를 해결하기 위해서는 android-studio/bin/idea.properties에 idea.max.intellisense.filesize=25000로 수정하면 된다. (default는 2500) 출처 : ourcstory.tistory.com/42?category=630..
앱에서 서버로 인증할때는 OAuth 2.0방법을 가장많이 사용하는데 이에 대한 설명은 아래의 링크를 참조해주세요. https://oauth.net/2/ OAuth 2.0에서는 JWT(Json Web Token)를 이용합니다. 이는 인증정보를 암호화하여 url형식으로 전달해 주는 토큰이라고 합니다. Token이라는 것은 만료시간이 있으며 만료된 Token은 더이상 사용하지 못합니다. 만약 만료된 Token으로 서버와 통신한다면 401 error를 만나게 됩니다. 따라서 만료된 access token은 refresh token으로 새로운 access token을 갱신받아 사용해야만 합니다. 그럼 안드로이드에서는 토큰 갱신을 어떻게 구현할까요? 바로 okhttp3를 통해 쉽게 구현할 수 있습니다. val bu..
앱에서 서버와 통신을 할 때 사용자의 인증이 필요한 경우가 있습니다. 이럴 경우에는 해더에 Authorization를 추가하여 인증된 사용자만 정보를 취득하도록 합니다. Authorization에도 BearerToken, ApiKey, OAuth2.0등 여러가지 종류가 있습니다. 그럼 어떻게 해더에 Authorization를 넣을까요? 제가 즐겨쓰는 retofit2와 okhttp3를 이용하여 알아보도록 할게요. 먼저 retorfit2의 custom header를 사용하여 추가하는 방법입니다. public interface ApiService { @Headers("Authorization: your auth token") @GET("/test") List getTestData(); } 또 다른 방법으로는 ..
안드로이드 개발을 하다보면 progress를 사용하여 현재 데이터를 처리중이라는 것을 알려야할 때가 있다. 다음은 우리가 흔히 볼수 있는 progress를 사용하는 방법이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Colored by Color Scripter cs 위의 코드는 왼쪽과 같은 결과를 나타낸다. xml 디자인을 하다보면 다양한 뷰를 추가해아하고 progress의 경우 다른 뷰보다 최상위로 표현하기위해 가장 하단에 선언하여 사용한다. 하지만 좀 더 직관적이면서 심플하게 xml에 적용하고 싶었고 custom view를 만들어 사용하게됬다. 다음은 custom view를 이용한 progress wrapper를 만들어 사용한 예제다. custom_progre..
바코드는 문자와 숫자를 막대와 공백으로 표시함으로서 상품관리를 편리하게 하는 것으로 가장 간단하게 구현하는 방법에 대해 알아보겠습니다. gradle에 다음의 라이브러리들을 추가합니다. //바코드 읽기 implementation 'com.budiyev.android:code-scanner:2.1.0' //바코드 쓰기 implementation('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false } zxing에서 제공하는 바코드 유형은 17개정도인데 아래는 QR_CODE를 생성하는 예제입니다. 이 외에도 CODE_39나 CODE_93등의 바코드 유형도 생성가능합니다.val barcodeEncoder = BarcodeEncoder() va..
프로젝트를 진행하던 중 웹뷰의 스크롤에 따라 toolbar를 collapse, expand를 하는 기능을 만들게 되었다.안드로이드에서는 web view의 스크롤을 감지하는 Listener를 제공하는데 다음과 같다.webView.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY -> // insert your code }하지만 문제가 있었는데 위의 기능은 API 23부터 제공하는 기능이었다.그렇다면 23이전에서는 어떻게 스크롤을 탐지할 수 있을까? 구글링의 결과 끝에 원하는 답을 찾을 수 있었다. class CustomWebView : WebView { private var oldY: Float = 0.toFloat() priv..
Room을 이용하여 내부에 대량의 데이터를 저장할 경우. 저장된 데이터를 페이징처리를 통하여 효율적인 리스트를 표현하는 것이 좋다. Dao@Query("SELECT * FROM table") abstract fun selectList() : DataSource.Factory페이징처리 부분 val config = PagedList.Config.Builder() .setInitialLoadSizeHint(20) //최초 로드사이즈는 20개 .setPageSize(10) // 페이징당 10개 .setPrefetchDistance(10) // 10개마다 다음페이지를 미리불러오기 .setEnablePlaceholders(true) .build() var pagedItems = LivePagedListBuilder..
예전에 우리가 자바에서 사용하던 방법SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); editor.putString("key","value"); editor.apply(); 코틀린으로 사용하면?private val pref = PreferenceManager.getDefaultSharedPreferences(context) @Suppress("IMPLICIT_CAST_TO_ANY") fun get(key: String, defaultValue: T): T { return when (defaultValue) {..
이글은 windows10 / android studio 3.3.1을 기준으로 작성되었습니다. 안드로이드 에뮬레이터를 사용하려고 할 때 다음과 같은 에러가 출력이 되었다. x86 emulation currently requires hardware acceleration x86에뮬레이터를 쓰려면 하드웨어 가속이 필요하다는 것인데. 아래와 같이 박스친 툴을 설치하면 된다. 하지만 설치 한 이후에도 계속 같은 오류가 발생한다면 BIOS설정에서 Virtualization Technology 기능을 활성화 해야한다. 또한 Windows 기능 켜기/끄지 설정에서 Windows 하이퍼바이저 플랫폼이 활성화 되있는지도 체크하자. 완료가 되었다. 이제 즐겁게 개발하면 된다. 출처: https://akaisun.tistor..