AndroidManifest.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
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) |
