AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.MyApplication">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Spinner
android:id="@+id/spinnerDays"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp" />
<TextView
android:id="@+id/textViewRoutine"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/spinnerDays"
android:layout_marginTop="50dp"
android:textSize="18sp"
android:textColor="#000000"
android:layout_centerHorizontal="true" />
</RelativeLayout>
strings.xml
<resources>
<string name="app_name">My Application</string>
<string-array name="days_of_week">
<item>Lunes</item>
<item>Martes</item>
<item>Miércoles</item>
<item>Jueves</item>
<item>Viernes</item>
<item>Sábado</item>
<item>Domingo</item>
</string-array>
</resources>
MainActivity.kt
package com.example.myapplication
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.TextView
import androidx.activity.ComponentActivity
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.Response
import com.android.volley.toolbox.Volley
import com.google.gson.Gson
import com.android.volley.toolbox.StringRequest
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.json.JSONArray
import org.json.JSONException
class MainActivity : ComponentActivity() {
private lateinit var spinnerDays: Spinner
private lateinit var textViewRoutine: TextView
private lateinit var requestQueue: RequestQueue
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
spinnerDays = findViewById(R.id.spinnerDays)
textViewRoutine = findViewById(R.id.textViewRoutine)
requestQueue = Volley.newRequestQueue(this)
val days = resources.getStringArray(R.array.days_of_week)
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, days)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinnerDays.adapter = adapter
spinnerDays.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val url = "https://www.jesusninoc.com/rutinasp.json"
jsonParse(url, position + 1)
}
override fun onNothingSelected(parent: AdapterView<*>?) {
// No se realiza ninguna acción al no seleccionar nada en el Spinner
}
}
}
private fun jsonParse(url: String, day: Int) {
val request = StringRequest(Request.Method.GET, url,
Response.Listener { response ->
try {
val jsonArray = JSONArray(response)
GlobalScope.launch(Dispatchers.Main) {
val routine = getRoutineForDay(response, day)
textViewRoutine.text = routine
}
} catch (e: JSONException) {
e.printStackTrace()
}
},
Response.ErrorListener { error ->
error.printStackTrace()
})
requestQueue.add(request)
}
private suspend fun getRoutineForDay(response: String, day: Int): String {
return withContext(Dispatchers.IO) {
val gson = Gson()
val routinesList = gson.fromJson(response, Array<Routine>::class.java)
val dayRoutines = routinesList.filter { it.dia == day.toString() }
val routines = StringBuilder()
dayRoutines.forEach { routine ->
routines.append("${routine.tipo}: ${routine.rutina}\n")
}
return@withContext routines.toString()
}
}
}
data class Routine(val dia: String, val tipo: String, val rutina: String)
Publicado el día 3 de diciembre de 2023CATEGORÍAS
Android, Kotlin