import
android.app.Activity
import
android.content.Context
import
android.os.Bundle
import
android.widget.Toast
import
androidx.activity.ComponentActivity
import
androidx.activity.compose.setContent
import
androidx.compose.foundation.layout.*
import
androidx.compose.material.*
import
androidx.compose.runtime.*
import
androidx.compose.ui.Alignment
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.graphics.*
import
androidx.compose.ui.platform.LocalContext
import
androidx.compose.ui.text.TextStyle
import
androidx.compose.ui.text.font.FontFamily
import
androidx.compose.ui.text.font.FontWeight
import
androidx.compose.ui.text.input.TextFieldValue
import
androidx.compose.ui.text.style.TextAlign
import
androidx.compose.ui.unit.*
import
com.example.newcanaryproject.ui.theme.*
import
retrofit2.Call
import
retrofit2.Callback
import
retrofit2.Response
import
retrofit2.Retrofit
import
retrofit2.converter.gson.GsonConverterFactory
import
java.util.*
class
MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContent {
NewCanaryProjectTheme {
Surface(
modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background
) {
Scaffold(
topBar = {
TopAppBar(backgroundColor = greenColor,
title = {
Text(
text =
"Retrofit POST Request in Android"
,
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
color = Color.White
)
})
}) {
postData()
}
}
}
}
}
}
@Composable
fun postData() {
val ctx = LocalContext.current
val userName = remember {
mutableStateOf(TextFieldValue())
}
val job = remember {
mutableStateOf(TextFieldValue())
}
val response = remember {
mutableStateOf(
""
)
}
Column(
modifier = Modifier
.fillMaxSize()
.fillMaxHeight()
.fillMaxWidth(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text =
"Retrofit POST Request in Android"
,
color = greenColor,
fontSize =
20
.sp,
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Bold, textAlign = TextAlign.Center
)
Spacer(modifier = Modifier.height(
5
.dp))
TextField(
value = userName.value,
onValueChange = { userName.value = it },
placeholder = { Text(text =
"Enter your name"
) },
modifier = Modifier
.padding(
16
.dp)
.fillMaxWidth(),
textStyle = TextStyle(color = Color.Black, fontSize =
15
.sp),
singleLine =
true
,
)
Spacer(modifier = Modifier.height(
5
.dp))
TextField(
value = job.value,
onValueChange = { job.value = it },
placeholder = { Text(text =
"Enter your job"
) },
modifier = Modifier
.padding(
16
.dp)
.fillMaxWidth(),
textStyle = TextStyle(color = Color.Black, fontSize =
15
.sp),
singleLine =
true
,
)
Spacer(modifier = Modifier.height(
10
.dp))
Button(
onClick = {
postDataUsingRetrofit(
ctx, userName, job, response
)
},
modifier = Modifier
.fillMaxWidth()
.padding(
16
.dp)
) {
Text(text =
"Post Data"
, modifier = Modifier.padding(
8
.dp))
}
Spacer(modifier = Modifier.height(
20
.dp))
Text(
text = response.value,
color = Color.Black,
fontSize =
20
.sp,
fontWeight = FontWeight.Bold, modifier = Modifier
.padding(
10
.dp)
.fillMaxWidth(),
textAlign = TextAlign.Center
)
}
}
private
fun postDataUsingRetrofit(
ctx: Context,
userName: MutableState<TextFieldValue>,
job: MutableState<TextFieldValue>,
result: MutableState<String>
) {
val retrofit = Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build()
val retrofitAPI = retrofit.create(RetrofitAPI::
class
.java)
val dataModel = DataModel(userName.value.text, job.value.text)
val call: Call<DataModel?>? = retrofitAPI.postData(dataModel)
call!!.enqueue(object : Callback<DataModel?> {
override fun onResponse(call: Call<DataModel?>?, response: Response<DataModel?>) {
Toast.makeText(ctx,
"Data posted to API"
, Toast.LENGTH_SHORT).show()
val model: DataModel? = response.body()
val resp =
"Response Code : "
+ response.code() +
"\n"
+
"User Name : "
+ model!!.name +
"\n"
+
"Job : "
+ model!!.job
result.value = resp
}
override fun onFailure(call: Call<DataModel?>?, t: Throwable) {
result.value =
"Error found is : "
+ t.message
}
})
}