Como extraer tres registos de un JSON
Publicado por Luis (97 intervenciones) el 07/08/2017 00:16:24
Hola a todos.
Primeramente decirles que no domino mucho android pero a base de leer y leer he conseguido lo mas basico y he conseguido siguiendo un tutorial crear una base de datos en un servidor y desde la aplicacion android puedo hacer una consulta y obtener todos los registros en un textview en orden ascendente segun la edad $consulta = "SELECT * FROM Alumnos ORDER BY edad";
Me retorna un archivo JSON con todos los datos y los paso a un String para poder leerlos y mostrarlos en un TextView.
Hasta aqui todo bien, muestro en un listado ( un TextView ) todos los nombres de todos los alumnos con su edad y por orden ascendente.
El problema que me encuentro, es que quiero mostrar a la vez, en otros TextView solo el nombre del alumno de menor edad en un TextView
El alumno que le sigue en otro TextView tambien solo el nombre y lo mismo con el tercer alumno que sera el mayor de los tres primeros por edad y obtener solo el nombre.
¿ Como los separo ?
Para mostrar solo el primero lo he conseguido modificando el archivo .PHP $consulta = "SELECT * FROM Alumnos ORDER BY direccion LIMIT 0,1";
Pero como ya tengo todos los registros en el JSON queria saber si es posible sacar solo esos tres registros y mostrarlos cada uno en su respectivos TextViews
TextView primerresultado;
TextView segundoresultado;
TextView tercerresultado;
Muchas gracias por su tiempo y gracias por adelantado
Aquí dejo los archivos PHP del servidor así como el MainActivity por si le puede servir a algun usuario y por si les sirve de ayuda para entenderme
obtener_alumnos.PHP
Este el archivo requerido Alumnos.PHP
Y este el MainActivity de Android donde recibo el JSON con los datos
Primeramente decirles que no domino mucho android pero a base de leer y leer he conseguido lo mas basico y he conseguido siguiendo un tutorial crear una base de datos en un servidor y desde la aplicacion android puedo hacer una consulta y obtener todos los registros en un textview en orden ascendente segun la edad $consulta = "SELECT * FROM Alumnos ORDER BY edad";
Me retorna un archivo JSON con todos los datos y los paso a un String para poder leerlos y mostrarlos en un TextView.
Hasta aqui todo bien, muestro en un listado ( un TextView ) todos los nombres de todos los alumnos con su edad y por orden ascendente.
El problema que me encuentro, es que quiero mostrar a la vez, en otros TextView solo el nombre del alumno de menor edad en un TextView
El alumno que le sigue en otro TextView tambien solo el nombre y lo mismo con el tercer alumno que sera el mayor de los tres primeros por edad y obtener solo el nombre.
¿ Como los separo ?
Para mostrar solo el primero lo he conseguido modificando el archivo .PHP $consulta = "SELECT * FROM Alumnos ORDER BY direccion LIMIT 0,1";
Pero como ya tengo todos los registros en el JSON queria saber si es posible sacar solo esos tres registros y mostrarlos cada uno en su respectivos TextViews
TextView primerresultado;
TextView segundoresultado;
TextView tercerresultado;
Muchas gracias por su tiempo y gracias por adelantado
Aquí dejo los archivos PHP del servidor así como el MainActivity por si le puede servir a algun usuario y por si les sirve de ayuda para entenderme
obtener_alumnos.PHP
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
<?php
/**
* Obtiene todas las alumnos de la base de datos
*/
require 'Alumnos.php';
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
// Manejar petición GET
$alumnos = Alumnos::getAll();
if ($alumnos) {
$datos["estado"] = 1;
$datos["alumnos"] = $alumnos;
print json_encode($datos);
} else {
print json_encode(array(
"estado" => 2,
"mensaje" => "Ha ocurrido un error"
));
}
}
Este el archivo requerido Alumnos.PHP
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
<?php
require 'Database.php';
class Alumnos
{
function __construct()
{
}
public static function getAll()
{
$consulta = "SELECT * FROM Alumnos ORDER BY edad";
try {
// Preparar sentencia
$comando = Database::getInstance()->getDb()->prepare($consulta);
// Ejecutar sentencia preparada
$comando->execute();
return $comando->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
return false;
}
}
}
?>
Y este el MainActivity de Android donde recibo el JSON con los datos
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button consultar;
TextView resultado;
TextView primerresultado;
TextView segundoresultado;
TextView tercerresultado;
// IP de mi Url
String IP = "https://midireccionweb.com";
// Ruta del Web Service
String GET = IP + "/obtener_alumnos.php";
ObtenerWebService hiloconexion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
consultar = (Button)findViewById(R.id.consultar);
resultado = (TextView)findViewById(R.id.resultado);
primerresultado = (TextView)findViewById(R.id.elprimer);
segundoresultado = (TextView)findViewById(R.id.elsegundo);
tercerresultado = (TextView)findViewById(R.id.eltercer);
// Listener del boton
consultar.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.consultar:
hiloconexion = new ObtenerWebService();
hiloconexion.execute(GET,"1"); // Parámetros que recibe doInBackground
break;
default:
break;
}
}
public class ObtenerWebService extends AsyncTask<String,Void,String> {
@Override
protected String doInBackground(String... params) {
String cadena = params[0];
URL url = null; // Url de donde queremos obtener información
String devuelve ="";
if(params[1]=="1"){ // Consulta de todos los alumnos
try {
url = new URL(cadena);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //Abrir la conexión
connection.setRequestProperty("User-Agent", "Mozilla/5.0" +
" (Linux; Android 1.5; es-ES) Ejemplo HTTP");
//connection.setHeader("content-type", "application/json");
int respuesta = connection.getResponseCode();
StringBuilder result = new StringBuilder();
if (respuesta == HttpURLConnection.HTTP_OK){
InputStream in = new BufferedInputStream(connection.getInputStream()); // preparo la cadena de entrada
BufferedReader reader = new BufferedReader(new InputStreamReader(in)); // la introduzco en un BufferedReader
// El siguiente proceso lo hago porque el JSONOBject necesita un String y tengo
// que tranformar el BufferedReader a String. Esto lo hago a traves de un
// StringBuilder.
String line;
while ((line = reader.readLine()) != null) {
result.append(line); // Paso toda la entrada al StringBuilder
}
//Creamos un objeto JSONObject para poder acceder a los atributos (campos) del objeto.
JSONObject respuestaJSON = new JSONObject(result.toString()); //Creo un JSONObject a partir del StringBuilder pasado a cadena
//Accedemos al vector de resultados
String resultJSON = respuestaJSON.getString("estado"); // estado es el nombre del campo en el JSON
if (resultJSON=="1"){ // hay alumnos a mostrar
JSONArray alumnosJSON = respuestaJSON.getJSONArray("alumnos"); // estado es el nombre del campo en el JSON
for(int i=0;i<alumnosJSON.length();i++){
devuelve = devuelve + alumnosJSON.getJSONObject(i).getString("idalumno") + " " +
alumnosJSON.getJSONObject(i).getString("nombre") + " " +
alumnosJSON.getJSONObject(i).getString("edad") + "\n";
}
}
else if (resultJSON=="2"){
devuelve = "No hay alumnos";
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return devuelve;
}
return null;
}
@Override
protected void onCancelled(String s) {
super.onCancelled(s);
}
@Override
protected void onPostExecute(String s) {
// Aqui se muestran todos los alumnos en un unico TextView con sus campos id/nombre/edad
resultado.setText(s);
//super.onPostExecute(s);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
}
Valora esta pregunta


0