Android, Django 서버의 JSON 데이터를 제공하는 API 엔드포인트로 요청 보내기

이도현·2023년 8월 11일
0

Android 공부

목록 보기
13/30

1. OkHttp를 사용한 방법

import okhttp3.*
import java.io.IOException

class MainActivity : AppCompatActivity() {
    companion object {
        private const val BASE_URL = "http://your-django-server-url.com/api" // Django 서버의 API 엔드포인트 URL
    }

    private val client = OkHttpClient()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 네트워크 요청 보내기
        val request = Request.Builder()
            .url("$BASE_URL/data") // 데이터를 반환하는 API 엔드포인트 URL
            .build()

        client.newCall(request).enqueue(object : Callback {
            override fun onResponse(call: Call, response: Response) {
                val responseData = response.body?.string()

                // JSON 데이터 파싱 및 활용
                if (responseData != null) {
                    // responseData를 원하는 방식으로 파싱하여 사용
                    runOnUiThread {
                        // UI 업데이트 작업 수행
                        // 파싱된 데이터를 UI 요소에 표시
                    }
                }
            }

            override fun onFailure(call: Call, e: IOException) {
                e.printStackTrace()
                // 네트워크 요청 실패 처리
            }
        })
    }
}
client.newCall(request)

비동기적 네트워크 요청
Callback
인터페이스 구현

주의사항

  • 네트워크요청은 UI 스레드에서 직접 수행하면 안됨
    runOnUiThread나 다른방법 사용해야함

2. Retrofit을 사용한 방법

1) Gradle 파일에 Retrofit 의존성 추가

dependencies {
    // Retrofit 라이브러리 의존성 추가
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

2) 데이터 모델 클래스 정의

  • JSON 데이터의 구조와 일치해야함
data class MyData(
	val id: Int,
    val name: String,
    // 추가 필드 정의
}

3) Retrofit 인터페이스 정의

interface MyApiService{
	@GET("/api/data") // API 엔드포인트 경로
    suspent fun get Data(): List<MyData>
}

4) Retrofit 인스턴스를 생성하고 API 호출을 처리하는 코드를 작성

class MainActivity: AppCompatActivity(){
	companino object{
    	private const val BASE_URL = "http://your-django-server-url.com"
    }
    
    private lateinit var apiService:MyApiService
    
    override fun onCreate(savedInstanceState: Bundel?){
    	super.onCreate(savedInstanceState)
        setConentView(R.layout.activity_main)
        
        //Retrofit 인스턴스 생성
        val retrofit = Retrofit.Builder()
        	.baseUrl(BASE_URL)
			.addConverterFactory(GsonConverterFactory.create())
            .build()
            
        //Retrofit을 사용하여 인터페이스 구현체 생성
        apiService = retrofit.create(MyApiService::class.java)
        
        //데이터 가져오기 요청
        CoroutineScope(Dispatehrs.IO).launch{
        	try{
            	val data = apiService.getData()
                //데이터 파싱 및 저장 처리
                processData(data)
            } catch (e: Exception){
            	e.printStackTrace()
            }
        }
    }
    
    private fun prcessData(data: List<MyData>){
    	// 데이터를 원하는 방식으로 파싱하고 저장하는 로직 구현
        for(item in data){
        	val id = item.id
            val name = item.name
            //데이터 활용
        }
    }
}
profile
좋은 지식 나누어요

0개의 댓글