https://thdbs523.tistory.com/376 [안드로이드/코틀린] Retrofit2 라이브러리로 JSON 데이터 다루기 (GET, POST) Retrofit Retrofit2는 HTTP 통신을 도와주는 라이브러리다. GET, POST, PUT, DELETED 등을 전달하면 서버에서 처리 후 여러 형태의 데이터로 응답을 제공받을 수 있다. 비슷한 역할을 하는 HttpURLConnection 이나 A thdbs523.tistory.com Retrofit2에 대한 기본 개념과 구현 기초 셋팅, GET/POST 구현 방법은 위 포스팅에서 설명했다. 이번에는 PUT/DELETE 함수를 구현하는 방법에 대해 알아보자. 저번 포스팅과 동일하게 JSON 데이터는 아래 url을 활용한다. https://j..
Retrofit2 Retrofit2는 HTTP 통신을 도와주는 라이브러리다. GET, POST, PUT, DELETED 등을 전달하면 서버에서 처리 후 여러 형태의 데이터로 응답을 제공받을 수 있다. 비슷한 역할을 하는 HttpURLConnection 이나 AsyncTask, Volley 라이브러리들은 deprecated 되었고, 사용하기 복잡하기 때문에 현재 Retrofit이 가장 보편적으로 쓰이고 있다. 또한 Retrofit2는 OkHttp 기반으로 작동하기 때문에, OkHttp의 Interpreter를 사용해서 고정적인 헤더를 추가하거나 응답값을 가로채서 원하는 데이터 형태로 가공하는 등의 작업들이 가능하다. https://jsonplaceholder.typicode.com/posts 이러한 Ret..
데이터 바인딩을 하기 위해 가장 먼저 해야할 일은 xml 파일에 대응하는 binding 파일의 객체를 생성하는 것이다. 이 객체를 이용해 xml 아이디를 바로 접근해 뷰를 제어할 수 있다. binding = DataBindingUtil.setContentView(this, R.layout.activity_notification) activity에서는 위처럼 xml 파일명을 setContentView에 넣어서 binding 객체를 얻는다. override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreateView(inflater, container..
AlarmManager AlarmManager는 특정한 시간과 주기로 Intent를 실행하는 기능을 제공한다. 예를 들어, 정해진 시간에 사용자에게 Notification을 보내려고 할 때 AlarmManager를 활용할 수 있다. 원하는 시간에 AlarmManager를 통해 broadcast를 전송하도록 구현하고, 그 broadcast를 받은 receiver는 Notification을 발행하도록 구현하면 된다. 자세한 방법은 다음 포스팅으로 업로드할 예정이다. 이 포스팅에서는 AlarmManager의 특징과 장단점, 구현 방법 등에 대해서 알아보자. 특징 지정된 시간과 간격으로 Intent를 실행한다. 애플리케이션 외부에서 작동한다. 따라서 앱을 실행하고 있지 않을 때나 Doze 모드인 경우(Doze ..
Notification (알림) 사용자에게 미리 알림을 보내고 앱에서 보내는 정보를 적절한 시기에 제공하기 위해 안드로이드에 앱 외부에서 표시하는 메시지다. 사용자는 알림을 클릭하여 앱을 열거나 알림 자체에서 바로 특정 작업을 실행할 수 있다. 알림 종류 1. status bar 및 알림 목록 첫 번째 사진 처럼 status bar에 아이콘 형태로 notification이 뜰 수 있다. 또한 status bar를 아래로 내리면 알림 목록에 해당 알림이 뜬다. 2. 헤드업 알림 현재 실행하고 있는 포그라운드 앱 앞에 헤드업 알림이 나타난다. 몇 초 후 사라지고 1번의 경우처럼 status bar와 알림 목록에 표시된다. 헤드업 알림이 나타나는 경우는 아래와 같다. 알림의 intent가 fullScreenI..
기존 방식 - startActivityForResult 먼저 activity간 데이터를 전달하는 기존 방식을 알아보자. 자세히 말하면 새로운 activity로 이동하고, 그 activity가 닫힐 때 결과를 받아오는 것이다. 1. 데이터를 받을 activity에서 새로운 activity 시작 (MainActivity.kt) startActivityForResult(Intent(this, SubActivity::class.java), REQUEST_CODE) 기존 activity의 코드는 위와 같다. 이동하려는 activity를 Intent에 담아서 startActivityForResult()를 호출한다. 결과를 받아오지 않고 그냥 activity를 실행하려면 startActivity()를 사용했지만, 결..
권한 요청 방법 - 기존 방식 먼저 기존에 안드로이드에서 권한을 요청하기 위해 사용한 방법을 알아보자. 1. manifest manifest 파일의 바깥에 을 넣어준다. 2. 권한 요청 fun requestPermissions() { if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { return } ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), REQUEST_CODE) } checkSelfPermission()을 통해 현재 권한이 허용되었는지 거부되었는지 확인한다. 만..
Bundle Bundle은 데이터를 저장하기 위한 객체다. 키-값 쌍으로 데이터를 저장하기 때문에, Bundle 내부에서는 Map을 사용한다. Intent와의 차이점 Intent에서 putExtra()를 통해서도 키-값 쌍으로 저장하는데, 무슨 차이일까? Intent의 putExtra() 내부에서도 데이터를 저장하기 위해 Bundle을 사용한다 예를 들어 putExtra() 내부 코드는 아래와 같을 것이다. fun putExtra(name: String, value: String?): Intent { if (mExtras == null) { mExtras = Bundle() } mExtras.putString(name, value) return this } 두 객체 모두 Map을 사용하여 데이터를 키-값..