1. retrofit2와 okhttp3, gson 빌더를 싱글톤으로 생성한다 빌더를 만드는 것은 한 번 만들고 다시 코드를 적을일 없으니 저장해놓고 쓰도록 하자. import com.connple.weat.api.model.Notification import com.connple.weat.api.model.User import okhttp3.MultipartBody import retrofit2.Call import retrofit2.http.* object MyApp { private lateinit var retrofit: Retrofit private val signedIn get() = authToken != null fun update( baseUrl: String? = null, authTok..
Kotlin
아래와 같은 코드에서, lateinit var test: String override fun onCreate(saveInstanceState: Bundle?){ super.onCreate(saveInstanceState) setTest("안녕하세요!") System.out.println(test) } fun setTest(text: String) { Handler().postdelayed({ test = text }, 1000) } lateinit은 게으른, 느린 초기화를 의미한다. 느린 초기화란 메모리를 아끼기 위해서 변수가 필요할 때 초기화 하는 것을 의미한다. 하지만 이 변수를 초기화 하지 않고 사용한다면 초기화 에러가 뜬다. 위의 코드를 보면 1000 밀리세컨드가 지나간 다음에 test가 초기화 ..
인스타그램 같은 어플을 보면 아래로 스와이프 한 후 컨텐츠를 새로고침 해야할 때가 있다. 그럴 때 아주 유용한 레이아웃이다. 1. 아래와 같이 새로고침 하고자 하는 뷰를 SwipeRefreshLayout으로 감싸준다. 2. 뷰의 SwipeRefreshLayout을 변수에 저장한 후 setOnRefreshListener를 호출해서 함수를 실행한다. setColorSchemeResources는 돌아가는 동그라미의 배경 색과 동그라미 색을 정하는 코드이다. val listSwipeRefreshLayout = fragmentView.fragment_home_list_swipe_layout listSwipeRefreshLayout.setOnRefreshListener { getReviews() updateLayo..
유튜브, 인스타그램과 같은 게시글들을 보면 게시글에 몇 년전,,, 몇 달전, 몇 일전 등등과 같이 표기되어 있다. 자바의 기본 라이브러리를 활용해 이와 같은 기능을 만드는 함수의 소스코드이다. 같은 인턴하시는 분께서 java.time의 라이브러리들을 이용해 뚝딱 만드셨다... ㄷㄷ createAt에서 createAt값을 가진 LocalDateTime 객체를 생성하고 now에서 현재 값을 생성한 후 ChronoUnit으로 값을 계산한 후 리턴한다. class TimeStamp{ fun timestampToString(createdAtDate: Date): String { val createdAt = LocalDateTime.ofInstant(createdAtDate.toInstant(), ZoneId.sy..
나의 경우에는 MyApp 클래스를 만들고 Application()을 상속시켜 전역 변수를 저장하는 클래스를 만들고, 여기에 applicationContext를 저장해서 전역에서 context를 편하게 쓰려고 만들었으나 위와 같은 에러가 떳다. static, companion object와 같은 정적 변수를 초기화 할 때 나타나는 에러로 이해하고 있다. class MyApp : Application() { companion object { var user: User? = null // 기존 코드 // val applicationContext: Context = MyApp().applicationContext val applicationContext: Context get() = MyApp().applica..
안드로이드 앱을 개발하다 보면 각 분기에 따라서 팝업을 띄워줘야 할 때가 있다. 간단하게 코드로 보자 fun onClickActivitySelectedPhoto(view: View) { val photoDialog = AlertDialog.Builder(this) val items = arrayOf("카메라", "앨범") photoDialog.setTitle("사진을 추가할 방법을 선택해주세요") photoDialog.setItems(items, DialogInterface.OnClickListener { dialog, which -> when (items[which]) { "카메라" -> { startActivityForResult( ImagePicker.cameraOnly().getIntent(thi..