Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 김영한
- QueryDSL
- JPQL
- jpa
- AOP
- Proxy
- http
- Exception
- pointcut
- kotlin
- Servlet
- springdatajpa
- 인프런
- Spring Boot
- 스프링 핵심 원리
- transaction
- JDBC
- 자바
- Thymeleaf
- 그리디
- spring
- db
- 스프링 핵심 기능
- 알고리즘
- Android
- SpringBoot
- Greedy
- java
- 백준
- 스프링
Archives
- Today
- Total
개발자되기 프로젝트
[Android] Retrofit 본문
1. Retrofit
Retrofit은 HTTP API 통신을 돕는 라이브러리로 쉽고 사용이 간단하다.
2. 의존성 추가
// Retrofit
implementation "com.squareup.retrofit2:retrofit:2.9.0"
// Retrofit with Moshi Converter
implementation "com.squareup.retrofit2:converter-scalars:2.9.0"
// GSON
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
Gradle에 의존성을 추가.
보통 서버에 JSON을 통해 요청하거나 서버로부터 응답을 받는다.
이 떄 Gson라이브러리를 사용하면 Json Object<--> Kotlin Class로 변환이 가능하다.
3. 인터넷 사용 권한 추가
AndroidManifiest.xml에 다음과 같이 인터넷 권한을 부여하자.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
4. Dataclass생성
5. 인터페이스 생성
interface RetrofitApi {
@GET("/withJson")
fun getData(@Query("start") start: String,
@Query("middle") middle: String,
@Query("end") end: String
): Call<JsonResult>
}
Retrofit을 통해 사용할 메서드을 정의.
이 때 Call<>에는 Json을 어떤 타입으로 변환할지 지정.
6. Retrofit 객체 생성
object PathClient {
private val pathClient: Retrofit.Builder by lazy {
Retrofit.Builder()
.baseUrl("~~~~")
.addConverterFactory(GsonConverterFactory.create())
}
val pathService: RetrofitApi by lazy {
pathClient.build().create(RetrofitApi::class.java)
}
}
Retrofit 객체를 Object로 만들어서 싱글톤으로 만들어 주자.
해당 객체를 Retrofit을 초기화 하고 호출 시 가져오는 역할을 한다.
lazy로 실체 호출 시 초기화 하도록 했다.
이전에 만든 interface응 create 메서드에 전달한다.
7. Retofit 사용
Fragment나 Activity에서 다음과 같이 사용할 수 있다.
val callGetPathData = PathClient.pathService.getData(startTextView.text.toString(),
middleTextView.text.toString(),
endTextView.text.toString()
)
callGetPathData.enqueue(object : Callback<JsonResult>{
override fun onResponse(call: Call<JsonResult>, response: Response<JsonResult>) {
if(response.isSuccessful){
//성공처리
val result = response.body() as JsonResult
viewModel.setResultDate(result)
it.findNavController().navigate(R.id.action_searchFragment_to_resultFragment)
}else{
Log.d("[Retrofit-response]", response.message().toString())
Toast.makeText(requireContext(), "응답을 가져오는데 실패했습니다.", Toast.LENGTH_SHORT).show()
}
}
override fun onFailure(call: Call<JsonResult>, t: Throwable) {
Log.d("[Retrofit-fail]", t.message.toString())
Toast.makeText(requireContext(), "요청에 실패했습니다.", Toast.LENGTH_SHORT).show()
}
})
'Project > 대중교통 길찾기' 카테고리의 다른 글
[Android] Fragment, Navigation, (0) | 2022.05.01 |
---|---|
Json Viewer 추천 (0) | 2022.05.01 |
[Android, Kotlin] JSON to Kotlin Class (0) | 2022.04.30 |
Background Process : nohup (0) | 2022.04.19 |
[Android] API 요청 (0) | 2022.04.19 |
Comments