package
com.example.newcanaryproject
import
android.content.Context
import
android.content.Intent
import
android.net.Uri
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.Image
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.res.colorResource
import
androidx.compose.ui.text.font.FontFamily
import
androidx.compose.ui.text.font.FontWeight
import
androidx.compose.ui.text.style.TextAlign
import
androidx.compose.ui.unit.*
import
coil.compose.rememberAsyncImagePainter
import
com.android.volley.Request
import
com.android.volley.RequestQueue
import
com.android.volley.toolbox.JsonObjectRequest
import
com.android.volley.toolbox.Volley
import
com.example.newcanaryproject.ui.theme.*
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 =
"JSON Parsing in Android"
,
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
color = Color.White
)
})
}) {
volleyJSONParsing()
}
}
}
}
}
}
@Composable
fun volleyJSONParsing() {
val ctx = LocalContext.current
val courseName = remember {
mutableStateOf(
""
)
}
val courseRequisites = remember {
mutableStateOf(
""
)
}
val courseImg = remember {
mutableStateOf(
""
)
}
val courseDesc = remember {
mutableStateOf(
""
)
}
val courseLink = remember {
mutableStateOf(
""
)
}
val progress = remember {
mutableStateOf(
true
)
}
jsonParsing(ctx, courseName, courseRequisites, courseImg, courseDesc, courseLink, progress)
Column(
modifier = Modifier
.fillMaxSize()
.padding(horizontal =
20
.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Top
) {
if
(progress.value) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(horizontal =
20
.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
CircularProgressIndicator(
modifier = Modifier.padding(
16
.dp),
color = colorResource(id = R.color.purple_200),
strokeWidth = Dp(value = 4F)
)
}
}
Spacer(modifier = Modifier.height(
4
.dp))
Image(
painter = rememberAsyncImagePainter(courseImg.value),
contentDescription =
"gfg image"
,
modifier = Modifier
.wrapContentSize()
.wrapContentHeight()
.fillMaxWidth()
.padding(
4
.dp),
alignment = Alignment.Center
)
Spacer(modifier = Modifier.height(
10
.dp))
Text(
text = courseName.value,
modifier = Modifier.fillMaxWidth(),
color = Color.Black,
fontSize =
20
.sp,
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Bold, textAlign = TextAlign.Center
)
Spacer(modifier = Modifier.height(
20
.dp))
Text(
text = courseRequisites.value,
modifier = Modifier.fillMaxWidth(),
color = Color.Black,
fontSize =
16
.sp,
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal, textAlign = TextAlign.Center
)
Spacer(modifier = Modifier.height(
30
.dp))
Text(
text = courseDesc.value,
modifier = Modifier.fillMaxWidth(),
color = Color.Black,
fontSize =
15
.sp,
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal, textAlign = TextAlign.Start
)
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Bottom
) {
Button(
onClick = {
val i = Intent(Intent.ACTION_VIEW)
i.setData(Uri.parse(courseLink.value))
ctx.startActivity(i)
},
modifier = Modifier
.fillMaxWidth()
.padding(
3
.dp)
.align(Alignment.CenterHorizontally)
.fillMaxWidth()
) {
Text(text =
"Visit Course"
, color = Color.White)
}
}
}
}
fun jsonParsing(
ctx: Context,
name: MutableState<String>,
requisites: MutableState<String>,
Img: MutableState<String>,
Desc: MutableState<String>,
Link: MutableState<String>,
progress: MutableState<Boolean>,
) {
val queue: RequestQueue = Volley.newRequestQueue(ctx)
val request = JsonObjectRequest(Request.Method.GET, url,
null
, { response ->
try
{
val courseName: String = response.getString(
"courseName"
)
val courseLink: String = response.getString(
"courseLink"
)
val courseImg: String = response.getString(
"courseimg"
)
val courseDesc: String = response.getString(
"courseDesc"
)
val coursePreq: String = response.getString(
"Prerequisites"
)
name.value = courseName
Link.value = courseLink
requisites.value = coursePreq
Img.value = courseImg
Desc.value = courseDesc
progress.value =
false
}
catch
(e: Exception) {
e.printStackTrace()
}
}, { error ->
Toast.makeText(ctx,
"Fail to get response"
, Toast.LENGTH_SHORT)
.show()
})
queue.add(request)
}