목록전체 글 (238)
Nuke Olaf - Log Store
로그아웃 private fun kakaoLogout() { UserManagement.getInstance().requestLogout(object : LogoutResponseCallback() { override fun onCompleteLogout() { // 로그아웃 완료 후 코드 작성 } }) } 탈퇴 private fun kakaoWithdrawal() { UserManagement.getInstance().requestUnlink(object : UnLinkResponseCallback() { override fun onSuccess(result: Long?) { // 회원탈퇴 성공 후 코드 작성 } override fun onSessionClosed(errorResult: ErrorResu..
AlertDialog Builder 의 setView() 를 사용해서 다이얼로그 안에 웹 뷰를 보여줄 수 있다. private fun showWebViewDialog(url: String) { val webView = WebView(this).apply { loadUrl(url) webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { view!!.loadUrl(url) return true } } } AlertDialog.Builder(this@MainActivity) .setTitle("WebView") .setView(webView) .se..
액티비티 백 스택을 전부 clear 하고, 새로운 액티비티를 시작하고 싶었다. val intent = Intent(this, LoginActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK startActivity(intent) finish() 그러나, 위의 액티비티 플래그가 제대로 먹히지 않아서 finishAffinity() 를 사용했다. affinity 는 액티비티가 속한 task 를 말한다. 기본적으로 한 앱의 모든 액티비티들은 모두 같은 task 에 속해있다. 그러나, 한 액티비티의 기본 affinity 를 다르게 수정할 수 있다. 다른 앱에 정의된 액티비티끼리 affini..
서버에서 데이터를 가져와 리사이클러뷰로 보여줘야 하는 경우, 많은 데이터를 전부다 한번에 가져오는 것은 무리가 있다. 그래서 사용자가 리사이클러뷰 스크롤을 하여 아이템을 보여지게 하는 데 필요한 경우에 무한 스크롤 기능을 구현하여 데이터를 가져올 수 있다. 무한 스크롤링도 어찌 보면 페이징 기능의 한 방식이다. 무한 스크롤 구현방법 0. 레트로핏 인터페이스 작성 레트로핏으로 서버와 통신하여 데이터를 가져올 것이다. 사용할 무한 스크롤 API 는 request 로 페이지와 아이템 개수를 요청하면, response 로 전체 게시글 총 개수, 다음 페이지 유무, 아이템 리스트를 반환한다. @GET("/posts") fun getPosts( @Query("page") page: Int, @Query("limit..
onSaveInstanceState를 사용하여 리사이클러뷰의 스크롤 중인 상태를 저장할 수 있다. 아래의 예시는 ActivityDetail 이 onCreate() 된 후, 다른 액티비티(ActivityAnother)를 호출하여 ActivityDetail 이 잠시 액티비티 스택에 쌓여있다가 다시 ActivityDetail 로 돌아와 onResume() 을 호출할때, 저장되었던 상태를 보여주도록 한다 class ActivityDetail : AppCompatActivity() { private var recyclerViewState: Parcelable? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstan..
HTTP FAILED: java.net.SocketTimeoutException: timeout 요청을 시작한 후 서버와의 연결이 제한시간 내에 이루어지지 않을 경우 위와 같은 에러가 발생한다. 서버와의 연결이 제한시간은 기본값이 10초로 설정되어 있는데, 시간을 이보다 더 늘리고 싶을 경우 okHttpClient 객체에 타임아웃을 설정해 줄 수 있다. connectTimeOut -> 요청을 시작한 후 서버와의 TCP handshake가 완료되기까지 지속되는 시간 ReadTimeOut -> 모든 바이트가 전송되는 속도를 감시 WriteTimeOut -> 읽기 타임 아웃의 반대 방향. 얼마나 빨리 서버에 바이트를 보낼 수 있는지 확인 val okHttpClient = OkHttpClient.Builder(..
* EditText 의 id 가 textInput 이다키보드 올리기fun showSoftInput() { val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.showSoftInput(textInput, 0) } 키보드 내리기fun hideSoftInput() { val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(textInput.windowToken, 0) } * ..
SearchView 에 setOnQueryListener 를 BindingAdpater 로 달아줄 수 있다. interface 로 setOnQueryListener 리스너 객체를 전달하여 BindingAdapter 를 만들수도 있지만, 코틀린은 함수형 언어인 만큼 고차함수를 사용하여 만들어보도록 하자. 1. activity_main.xml (constraint 는 코드량이 많아서 linear 로 만들었다) 2. MainActivity.kt package com.olaf.nukeolaf class MainActivity : AppCompatActivity() { val searchMovie = { query: String? -> // 검색하는 코드 작성... } override fun onCreate(sa..