카테고리 없음

안드로이드 스튜디오와 Django연결하기-4

sorecord 2025. 3. 12. 16:44

오늘은 안드로이드 스튜디오에서 Django DB로 값을 보내는 날이다.

 

어제했었던 코드에서 2가지만 추가를 해주면된다.

 


ApiService.kt

import retrofit2.http.POST
import retrofit2.http.Body

@POST("tests/")
    fun createTest(@Body test: Test): Call<Test>

@POST: 이 어노테이션은 HTTP POST 요청을 나타낸다. 주어진 URL("tests/")에 데이터를 전송하는 데 사용

@Body: 이 어노테이션은 test 객체가 HTTP 요청의 본문(body)로 전송됨을 의미


 

MainActivity.kt

// 입력 필드
TextField(
    value = newTestText,
    onValueChange = { newTestText = it },
    label = { Text("New Test") }
)

Button(onClick = {
    val newTest = Test(id = 0, test = newTestText)  // Test 객체 생성
    RetrofitInstance.apiService.createTest(newTest).enqueue(object : Callback<Test> {  // API 호출
        override fun onResponse(call: Call<Test>, response: Response<Test>) {
            if (response.isSuccessful) {
                Log.d("MainActivity", "Create Success: ${response.body()}")
                fetchTests { fetchedTests ->  // 목록 갱신
                    tests = fetchedTests ?: emptyList()
                }
                newTestText = ""  // 입력 필드 초기화
            } else {
                Log.e("MainActivity", "Create Error: ${response.code()}")
            }
        }

        override fun onFailure(call: Call<Test>, t: Throwable) {
            Log.e("MainActivity", "Create Failure: ${t.message}")
        }
    })
}) {
    Text("Create Test")
}

 

newTest: 사용자가 입력한 내용을 기반으로 새로운 Test 객체를 생성. id는 0으로 설정하여 새 객체임을 나타낸다. 

 

createTest(newTest)는 Retrofit API를 통해 서버에 새로운 테스트를 생성하기 위해 POST 요청을 보낸다. (enqueue 메서드를 사용하여 비동기적으로 요청을 처리.)

 

onResponse: API 호출이 성공적으로 완료되면 호출되는 메서드이다. 

이 내부에 있는 fetchTests는 테스트 목록을 갱신하기 위해 fetchTests 함수를 호출한다. 새로 생성된 테스트를 포함한 최신 목록을 가져온다. 

 

이렇게 구현하면 데이터가 문제없이 이동하는 것을 확인할 수 있다.