package
com.example.newcanaryproject
import
android.content.Context
import
android.os.Bundle
import
android.util.Log
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.android.volley.Request
import
com.android.volley.Response
import
com.android.volley.VolleyError
import
com.android.volley.toolbox.StringRequest
import
com.android.volley.toolbox.Volley
import
com.example.newcanaryproject.ui.theme.*
import
org.json.JSONException
import
org.json.JSONObject
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 =
"Volley PUT Request in Android"
,
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
color = Color.White
)
})
}) {
updateDataUsingVolley()
}
}
}
}
}
}
@Composable
fun updateDataUsingVolley() {
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 =
"Volley PUT 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 = {
updateData(
userName.value.text, job.value.text, ctx, response
)
},
modifier = Modifier
.fillMaxWidth()
.padding(
16
.dp)
) {
Text(text =
"Update 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 updateData(
userName: String,
job: String,
ctx: Context,
res: MutableState<String>
) {
val queue = Volley.newRequestQueue(ctx)
val request: StringRequest =
object : StringRequest(Request.Method.PUT, url, object : Response.Listener<String?> {
override fun onResponse(response: String?) {
Toast.makeText(ctx,
"Data Updated.."
, Toast.LENGTH_SHORT).show()
try
{
val jsonObject = JSONObject(response)
val result =
"User Name : "
+ jsonObject.getString(
"name"
) +
"\n"
+
"Job : "
+ jsonObject.getString(
"job"
) +
"\n"
+
"Updated At : "
+ jsonObject.getString(
"updatedAt"
)
res.value = result
}
catch
(e: JSONException) {
e.printStackTrace()
}
}
}, object : Response.ErrorListener {
override fun onErrorResponse(error: VolleyError?) {
Log.e(
"tag"
,
"error is "
+ error!!.message)
Toast.makeText(ctx,
"Fail to update data.."
, Toast.LENGTH_SHORT)
.show()
}
}) {
override fun getParams(): Map<String, String>? {
val params: MutableMap<String, String> = HashMap()
params[
"name"
] = userName
params[
"job"
] = job
return
params
}
}
queue.add(request)
}