ayuda con mostrar resultados web service json en un Listview

1,779 views
Skip to first unread message

xerex

unread,
Aug 26, 2013, 7:35:13 AM8/26/13
to desarrollad...@googlegroups.com
Hola buenas tardes

Estoy intentando conectar un webservice en Json con una aplicacion android. He seguido los pasos de este tutorial http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/ y al parecer todo bien hasta que se ejecuta y me dice esto :

08-26 11:18:36.382: E/Trace(848): error opening trace file: No such file or directory (2)
08-26 11:18:45.492: E/AndroidRuntime(848): FATAL EXCEPTION: main
08-26 11:18:45.492: E/AndroidRuntime(848): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.webservice/com.example.webservice.ResultadoActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.os.Handler.dispatchMessage(Handler.java:99)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.os.Looper.loop(Looper.java:137)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.ActivityThread.main(ActivityThread.java:5041)
08-26 11:18:45.492: E/AndroidRuntime(848): at java.lang.reflect.Method.invokeNative(Native Method)
08-26 11:18:45.492: E/AndroidRuntime(848): at java.lang.reflect.Method.invoke(Method.java:511)
08-26 11:18:45.492: E/AndroidRuntime(848): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-26 11:18:45.492: E/AndroidRuntime(848): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-26 11:18:45.492: E/AndroidRuntime(848): at dalvik.system.NativeStart.main(Native Method)
08-26 11:18:45.492: E/AndroidRuntime(848): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.ListActivity.onContentChanged(ListActivity.java:243)
08-26 11:18:45.492: E/AndroidRuntime(848): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:273)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.Activity.setContentView(Activity.java:1881)
08-26 11:18:45.492: E/AndroidRuntime(848): at com.example.webservice.ResultadoActivity.onCreate(ResultadoActivity.java:46)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.Activity.performCreate(Activity.java:5104)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
08-26 11:18:45.492: E/AndroidRuntime(848): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
08-26 11:18:45.492: E/AndroidRuntime(848): ... 11 more
 
Por lo que llego a entender tiene algo que ver con el ListView pero lo que no entiendo es que hago mal porque le pongo el listview y lo declaro
Deje aqui mi codigo por si me podeis ayudar 

Muchas gracias


webservice.rar

Jefferson Delgado P.

unread,
Aug 26, 2013, 7:37:26 AM8/26/13
to desarrollad...@googlegroups.com
Buenas Xerex,

Según entiendo en la línea "ComponentInfo{com.example.webservice/com.example.webservice.ResultadoActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'", en la vista de la Activity "ResultadoActivity" deberías tener un listview, cuyo id es "list".

Revisa que en el layout tienes un listview con ese id y que inicializas el mismo en el OnCreate.

Un saludo


2013/8/26 xerex <xere...@gmail.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/desarrolladores-android/9dfa28a0-5f0e-4008-ab10-e54247e7112b%40googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Gabriel Pozo

unread,
Aug 26, 2013, 9:39:20 AM8/26/13
to desarrollad...@googlegroups.com
Vi muy por encima el código, pero si extiendes de ListActivity como muestran en esa web la referencia al ListView no deberías tomarla con algo así? 

// Get listview
ListView lv = getListView();

Ah y el id no debería estar escrito así? android:id="@android:id/list" http://stackoverflow.com/a/11050829/1748764

Pensá que estas extendiendo de ListActivity ;) no de una Activty normal :D

Si buscas en Google:  Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
Vas a terminar encontrando muchos resultados ;)



Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
Message has been deleted

xerex

unread,
Aug 26, 2013, 12:14:26 PM8/26/13
to desarrollad...@googlegroups.com
Muchas gracias Gabriel segui tus consejos y solucionado el tema del ListView el problema ahora es que no me muestra nada,el ListView vacio, y ya no te puedo decir mas,no se muestran los resultados. Los resultados los deberia de coger de una funcion que tengo en php que me devuelve las variables en un array que codifico en JSON , pero algo hare mal que no me las recoge.

Muchas gracias por tu ayuda


2013/8/26 xerex <xere...@gmail.com>
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/desarrolladores-android/9dfa28a0-5f0e-4008-ab10-e54247e7112b%40googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Gabriel Pozo

unread,
Aug 26, 2013, 12:22:00 PM8/26/13
to desarrollad...@googlegroups.com
Simples preguntas a realizarse :D

Estas enviando la info?
Te conectas correctamente?
Toma la info el dispositivo?
Si respondes si a todo eso, como tratas los datos para meterlo al listview.

Y podemos desmenuzar mas la cosa ;) Separa todo en pequeños pasos, y concéntrate en resolver correctamente cada uno de ellos ;)



Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

xerex

unread,
Aug 26, 2013, 12:36:05 PM8/26/13
to desarrollad...@googlegroups.com


2013/8/26 xerex <xere...@gmail.com>
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsubscr...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsubscr...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.


Gabriel tengo hecho un simple formulario en PHP que guarda los datos en una base de datos mysql y los muestra en otro archivo PHP, hace una consulta a mysql y me muestra esa consulta con los valores codificados en JSON y funciona correcto me los muestra bien la prueba la hago a traves del localhost de wampserver como servidor local, te pongo aqui el codigo de la funcion por si esta mal hecha 

function ver(){
$respuesta=Array();
$conexion=mysql_connect("localhost","root","");//llamada a la bd para meter los datos del formulario
if(!$conexion)
{
exit ("Error");
}
mysql_select_db("adesa80",$conexion);
$consulta=mysql_query("SELECT * FROM preminimas ORDER BY fecha DESC LIMIT 1");
$filas=mysql_num_rows($consulta);// nos dice el numero de filas que hay en bd
while($tupla=mysql_fetch_array($consulta)){
$respuesta=$tupla['fecha'].'&nbsp&nbsp'.$tupla['jornada'].'&nbsp&nbsp'.$tupla['hora'].'&nbsp&nbsp'.$tupla['local'].'&nbsp&nbsp'.$tupla['resultadolocal'].'&nbsp&nbsp'.$tupla['visitante'].'&nbsp&nbsp'.$tupla['resultadovisitante'];
json_encode($tupla['fecha']).json_encode($tupla['jornada']).json_encode($tupla['hora']).json_encode($tupla['local']).json_encode($tupla['resultadolocal']).json_encode($tupla['visitante']).json_encode($tupla['resultadovisitante']).'</br>';
echo json_encode($respuesta);
}
mysql_close($conexion);
}
y ya despues en android intento consumirlo tal y como esta en el codigo anterior y no me da fallo en el logcat pero no me muestra nada

Eso es todo, asi es como lo hago pero no se, seguro que hay algo que esta mal

Muchas gracias
Un saludo

Gabriel Pozo

unread,
Aug 26, 2013, 12:54:01 PM8/26/13
to desarrollad...@googlegroups.com
Ármate de varios Logs para ver que llega, a lo mejor es solo problema de parse que le haces al JSON, o no. Pero si no tenes varios logs para ver lo que pasa, va a estar complicado, el código de conexión cual es?
Mostra cuando tengas los logs, la salida que vez en el logcat


Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

christian ruiz

unread,
Aug 26, 2013, 12:58:13 PM8/26/13
to desarrollad...@googlegroups.com
Puedes probar lo siguiente:
1.-Si la petición Sale pero no Regresa: Esta deployado tu App en PHP en localhost?: si es asì en tu App Android al invocarlo le das la ruta localhost , cambiala por 10.02.2 que es algo como el 127.0.0.1 de una PC Normal, en todo caso dale la IP de tu maquina y no localhost.
2.-Si tu petición no sale, entonces deberias fijarte si el Jar que estas usando para consimir e Servicio WEb esta bien referenciado , en mi caso yo use KSOAP for Android y tenia ese problema al inicio, incluso ahora cuando migré mi App a AndroidStudio.
3.-Pinta log en tu Aplicación para que lo puedas ver en el LogCAT


Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Juan de Dios Maldonado Sánchez

unread,
Aug 26, 2013, 1:28:00 PM8/26/13
to desarrollad...@googlegroups.com
Con lo fácil que es depurar paso a paso la aplicación (poniendo unos cuantos puntos de ruptura en los momentos "críticos") y ver si en todo momento cada variable tiene el contenido que debiera... ¬¬


2013/8/26 christian ruiz <ruizgonzal...@gmail.com>

xerex

unread,
Aug 29, 2013, 1:44:24 PM8/29/13
to
Buenas tardes

Antes de nada perdon por mi insistencia y mi ignorancia pero estoy desesperado con el tema porque no lo saco adelante

Acabo de hacer otro proyecto pero esta vez he seguido el tutorial de http://www.sgoliver.net/blog/?p=2665 y solo he seguido el metodo que obtiene la lista completa
Tengo un formulario en php que recoge los datos y los muestra en json
Cuando hago el metodo en mi aplicacion y lo ejecuto y todo va supuestamente, bien no me da ningun error el logcat, pero tampoco me muestras los datos. Como me aconsejasteis en los comentarios anteriores puse varios breakpoint y hay una variable que en todo momento me la devuelve vacia. Pongo el codigo .La variable que me devuelve vacia es String []contactos . Si este fuera el problema,¿por què?¿como solucionarlo?

public class MainActivity extends Activity {
private ProgressDialog pdialg;
ListView lis;
private String[] contactos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lis=(ListView)findViewById(R.id.listView1);
Lista ver=new Lista();
ver.execute();
}
private class Lista extends AsyncTask<String,Integer,Boolean>{
@Override
       protected void onPreExecute() {
           super.onPreExecute();
           pdialg = new ProgressDialog(MainActivity.this);
           pdialg.setMessage("Cargando datos. Espere...");
           pdialg.setIndeterminate(false);
           pdialg.setCancelable(false);
           pdialg.show();
       }

@Override
protected Boolean doInBackground(String... param) {
boolean resul = true;
HttpClient cliente=new DefaultHttpClient();
url.setHeader("content-type", "application/json");
try{
HttpResponse res=cliente.execute(url);
String resString=EntityUtils.toString(res.getEntity());
JSONArray resjson=new JSONArray(resString);
contactos=new String[resjson.length()];
for(int i=0;i<resjson.length();i++){
JSONObject obj = resjson.getJSONObject(i);

        String nombre = obj.getString("nombre");
        String apellido = obj.getString("apellido");
        int telefono = obj.getInt("telefono");

        contactos[i] = "" + nombre + "-" + apellido + "-" + telefono;
}
}catch(Exception ex)
{
       Log.e("ServicioRest","Error!", ex);
}
return resul;
}
protected void onPostExecute(Boolean result) {

    if (result)
    {
    //Rellenamos la lista con los nombres de los clientes
    //Rellenamos la lista con los resultados
        ArrayAdapter<String> adaptador =
           new ArrayAdapter<String>(MainActivity.this,
               android.R.layout.activity_list_item, contactos);

        lis.setAdapter(adaptador);
    }
   }
}
}
Cuando se lleva mucho tiempo intentando cargar los datos me da este error el logcat
FATAL EXCEPTION: main
08-29 16:40:44.930: E/AndroidRuntime(973): java.lang.NullPointerException: storage == null
08-29 16:40:44.930: E/AndroidRuntime(973): at java.util.Arrays$ArrayList.<init>(Arrays.java:38)
08-29 16:40:44.930: E/AndroidRuntime(973): at java.util.Arrays.asList(Arrays.java:154)
08-29 16:40:44.930: E/AndroidRuntime(973): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:128)
08-29 16:40:44.930: E/AndroidRuntime(973): at com.example.webservice2.MainActivity$Lista.onPostExecute(MainActivity.java:98)
08-29 16:40:44.930: E/AndroidRuntime(973): at com.example.webservice2.MainActivity$Lista.onPostExecute(MainActivity.java:1)
08-29 16:40:44.930: E/AndroidRuntime(973): at android.os.AsyncTask.finish(AsyncTask.java:631)
08-29 16:40:44.930: E/AndroidRuntime(973): at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-29 16:40:44.930: E/AndroidRuntime(973): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
08-29 16:40:44.930: E/AndroidRuntime(973): at android.os.Handler.dispatchMessage(Handler.java:99)
08-29 16:40:44.930: E/AndroidRuntime(973): at android.os.Looper.loop(Looper.java:137)
08-29 16:40:44.930: E/AndroidRuntime(973): at android.app.ActivityThread.main(ActivityThread.java:5041)
08-29 16:40:44.930: E/AndroidRuntime(973): at java.lang.reflect.Method.invokeNative(Native Method)
08-29 16:40:44.930: E/AndroidRuntime(973): at java.lang.reflect.Method.invoke(Method.java:511)
08-29 16:40:44.930: E/AndroidRuntime(973): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-29 16:40:44.930: E/AndroidRuntime(973): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-29 16:40:44.930: E/AndroidRuntime(973): at dalvik.system.NativeStart.main(Native Method)

Perdonad 
Muchas gracias 

Un saludo



2013/8/26 christian ruiz <ruizgonzal...@gmail.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Gabriel Pozo

unread,
Aug 29, 2013, 2:20:20 PM8/29/13
to desarrollad...@googlegroups.com
No te da ningún error decís? Mire el código muy por encima,  creo que lo que haría es poner un log debajo de: String resString=EntityUtils.toString(res.getEntity());
Por ejemplo: Log.d("QUEMELLEGO", resString);   para ver si te esta llegando algo :D



Perdonad 
Muchas gracias 

Un saludo


El lunes, 26 de agosto de 2013 19:28:00 UTC+2, juande escribió:


2013/8/26 christian ruiz <ruizgonzal...@gmail.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

xerex

unread,
Aug 29, 2013, 3:04:25 PM8/29/13
to desarrollad...@googlegroups.com
 Hola buenas perdona,
 Mira si que me sale un fallo en el logcat ahora me lo ha cantado es un error  de la conexion 

Error!
08-29 19:00:49.671: E/ServicioRest(883): java.lang.IllegalArgumentException: Host name may not be null
08-29 19:00:49.671: E/ServicioRest(883): at org.apache.http.HttpHost.<init>(HttpHost.java:83)
08-29 19:00:49.671: E/ServicioRest(883): at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:497)
08-29 19:00:49.671: E/ServicioRest(883): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
08-29 19:00:49.671: E/ServicioRest(883): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
08-29 19:00:49.671: E/ServicioRest(883): at com.example.webservice2.MainActivity$Lista.doInBackground(MainActivity.java:66)
08-29 19:00:49.671: E/ServicioRest(883): at com.example.webservice2.MainActivity$Lista.doInBackground(MainActivity.java:1)
08-29 19:00:49.671: E/ServicioRest(883): at android.os.AsyncTask$2.call(AsyncTask.java:287)
08-29 19:00:49.671: E/ServicioRest(883): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
08-29 19:00:49.671: E/ServicioRest(883): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-29 19:00:49.671: E/ServicioRest(883): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
08-29 19:00:49.671: E/ServicioRest(883): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
08-29 19:00:49.671: E/ServicioRest(883): at java.lang.Thread.run(Thread.java:856)

Lo he vuelto a depurar y me ha salido esto,lo siento

Muchas gracias
Un saludo


2013/8/26 christian ruiz <ruizgonzal...@gmail.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsubscr...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Juan de Dios Maldonado Sánchez

unread,
Aug 29, 2013, 3:54:10 PM8/29/13
to desarrollad...@googlegroups.com
Viendo que:

08-29 19:00:49.671: E/ServicioRest(883): java.lang.IllegalArgumentException: Host name may not be null
08-29 19:00:49.671: E/ServicioRest(883):  at org.apache.http.HttpHost.<init>(HttpHost.java:83)
08-29 19:00:49.671: E/ServicioRest(883):  at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:497)
08-29 19:00:49.671: E/ServicioRest(883):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
08-29 19:00:49.671: E/ServicioRest(883):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
08-29 19:00:49.671: E/ServicioRest(883):  at com.example.webservice2.MainActivity$Lista.doInBackground(MainActivity.java:66)

Te mandaré como tarea que busques en Google:

HttpClient Httpget execute "IllegalArgumentException: Host name may not be null"

Encontrarás información muy interesante sobre tu problema. Que por cierto, no es durante la conexión, es poco antes de intentar conectar, mientras se intenta obtener el nombre del host con el que tienes que hacer la conexión HTTP. Nombre que por algún motivo no encuentra.


2013/8/29 xerex <xere...@gmail.com>
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

xerex

unread,
Sep 1, 2013, 6:01:21 PM9/1/13
to desarrollad...@googlegroups.com
Hola buenas noches

Hola Juande,he hecho la tarea que me mandastes y creo que encontre la solucion que era la variable HttpGet url que le pasaba mal la ip. Le ponia 10.02.2 y asi 
no era, era poniendo la IPv4 "192.168.x.x". Una vez corregido eso y volviendo a hacer el logcat me salia que no podia convertir el JsonArray asi que mirando encontre una posible solcucion, cambie esta linea de codigo:

JSONArray resjson=new JSONArray(resString);

por este
JSONObject ob=new JSONObject();
JSONArray resjson=ob.getJSONArray(resString);

Asi que mi codigo me queda asi :

public class MainActivity extends Activity {
private ProgressDialog pdialg;
ListView lis;
private String[] contactos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lis=(ListView)findViewById(R.id.listView1);
Lista ver=new Lista();
ver.execute();
}
private class Lista extends AsyncTask<String,Integer,Boolean>{
@Override
       protected void onPreExecute() {
           super.onPreExecute();
           pdialg = new ProgressDialog(MainActivity.this);
           pdialg.setMessage("Cargando datos. Espere...");
           pdialg.setIndeterminate(false);
           pdialg.setCancelable(false);
           pdialg.show();
       }

@Override
protected Boolean doInBackground(String... param) {
boolean resul = true;
HttpClient cliente=new DefaultHttpClient();
url.setHeader("content-type", "application/json");
try{
HttpResponse res=cliente.execute(url);
String resString=EntityUtils.toString(res.getEntity());
Log.d("QUEMELLEGO", resString);
JSONObject ob=new JSONObject();
JSONArray resjson=ob.getJSONArray(resString);
contactos=new String[resjson.length()];
for(int i=0;i<resjson.length();i++){
JSONObject obj = resjson.getJSONObject(i);

        String nombre = obj.getString("nombre");
        String apellido = obj.getString("apellido");
        int telefono = obj.getInt("telefono");

        contactos[i] = "" + nombre + "-" + apellido + "-" + telefono;
}
ArrayAdapter<String> adaptador =
           new ArrayAdapter<String>(MainActivity.this,
               android.R.layout.activity_list_item, contactos);

        lis.setAdapter(adaptador);
}catch(Exception ex)
{
       Log.e("ServicioRest","Error!", ex);
}
return resul;
}
   
}
}

Y cuando lo ejecuto me salta un error en el ultimo catch(Exception ex) y me muestra en la consola del Logcat el contenido del archivo php l que se conecta;

 Error!
09-01 21:46:01.884: E/ServicioRest(825): org.json.JSONException: No value for <html>

09-01 21:46:01.884: E/ServicioRest(825): <head>

09-01 21:46:01.884: E/ServicioRest(825): </head>

09-01 21:46:01.884: E/ServicioRest(825): <body>

09-01 21:46:01.884: E/ServicioRest(825): {"productos":[{"nombre":"0","apellido":"0","apodo":"0","telefono":"0"},

09-01 21:46:01.884: E/ServicioRest(825): </body>

09-01 21:46:01.884: E/ServicioRest(825): </html>
09-01 21:46:01.884: E/ServicioRest(825): at org.json.JSONObject.get(JSONObject.java:354)
09-01 21:46:01.884: E/ServicioRest(825): at org.json.JSONObject.getJSONArray(JSONObject.java:544)
09-01 21:46:01.884: E/ServicioRest(825): at com.example.webservice2.MainActivity$Lista.doInBackground(MainActivity.java:70)
09-01 21:46:01.884: E/ServicioRest(825): at com.example.webservice2.MainActivity$Lista.doInBackground(MainActivity.java:1)
09-01 21:46:01.884: E/ServicioRest(825): at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-01 21:46:01.884: E/ServicioRest(825): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
09-01 21:46:01.884: E/ServicioRest(825): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-01 21:46:01.884: E/ServicioRest(825): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
09-01 21:46:01.884: E/ServicioRest(825): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
09-01 21:46:01.884: E/ServicioRest(825): at java.lang.Thread.run(Thread.java:856)

Y estoy mirando pero no encuentro nada en concreto.
Muchas gracias
Un saludo


2013/8/29 xerex <xere...@gmail.com>
 Hola buenas perdona,

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Gabriel Pozo

unread,
Sep 1, 2013, 6:35:47 PM9/1/13
to desarrollad...@googlegroups.com
Ahí mismo te lo dice, no estas recibiendo un JSON limpio :D tendrías que recibir solo {"productos":[{"nombre":"0","apellido":"0","apodo":"0","telefono":"0"} y no el resto del HTML o deberías filtrar esos datos, para poder armar el objeto de tipo JSON  ;)
 

 Error!
09-01 21:46:01.884: E/ServicioRest(825): org.json.JSONException: No value for <html>

09-01 21:46:01.884: E/ServicioRest(825): <head>

09-01 21:46:01.884: E/ServicioRest(825): </head>

09-01 21:46:01.884: E/ServicioRest(825): <body>

09-01 21:46:01.884: E/ServicioRest(825):  {"productos":[{"nombre":"0","apellido":"0","apodo":"0","telefono":"0"},

09-01 21:46:01.884: E/ServicioRest(825): </body>

09-01 21:46:01.884: E/ServicioRest(825): </html>
09-01 21:46:01.884: E/ServicioRest(825):  at org.json.JSONObject.get(JSONObject.java:354)
09-01 21:46:01.884: E/ServicioRest(825):  at org.json.JSONObject.getJSONArray(JSONObject.java:544)
09-01 21:46:01.884: E/ServicioRest(825):  at com.example.webservice2.MainActivity$Lista.doInBackground(MainActivity.java:70)
09-01 21:46:01.884: E/ServicioRest(825):  at com.example.webservice2.MainActivity$Lista.doInBackground(MainActivity.java:1)


Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

xerex

unread,
Sep 2, 2013, 1:23:42 PM9/2/13
to desarrollad...@googlegroups.com
Muchas gracias por vuestro ayuda, Gabriel mire lo del fallo anterior y cada vez que se corregia algo fallaba otra cosa asi que tome la decision de buscar otro tutorial e hice otra aplicacion y esta si me funciona, me muestra los resultados. No pongo la direccion del tutorial porque no la encuentro pero dejo el codigo por si puede ayudar a alguien

public class MainActivity extends Activity {
private String  jsonResult;
private ListView listView;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 listView = (ListView) findViewById(R.id.listView1);
 accessWebService();
}
 
 
 
// Async Task to access the web
private class JsonReadTask extends AsyncTask<String, Void, String> {
 @Override
 protected String doInBackground(String... params) {
  HttpClient httpclient = new DefaultHttpClient();
  HttpPost httppost = new HttpPost(params[0]);
  try {
   HttpResponse response = httpclient.execute(httppost);
   jsonResult = inputStreamToString(
     response.getEntity().getContent()).toString();
  }
 
  catch (ClientProtocolException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
 }
 
 private StringBuilder inputStreamToString(InputStream is) {
  String rLine = "";
  StringBuilder answer = new StringBuilder();
  BufferedReader rd = new BufferedReader(new InputStreamReader(is));
 
  try {
   while ((rLine = rd.readLine()) != null) {
    answer.append(rLine);
   }
  }
 
  catch (IOException e) {
   // e.printStackTrace();
   Toast.makeText(getApplicationContext(),
     "Error..." + e.toString(), Toast.LENGTH_LONG).show();
  }
  return answer;
 }
 
 @Override
 protected void onPostExecute(String result) {
  ListDrwaer();
 }
}// end async task
 
public void accessWebService() {
 JsonReadTask task = new JsonReadTask();
 // passes values for the urls string array
 task.execute(new String[] { url });
}
 
// build hash set for list view
public void ListDrwaer() {
 List<Map<String, String>>lis = new ArrayList<Map<String, String>>();
 
 try {
  JSONObject jsonResponse = new JSONObject(jsonResult);
  JSONArray jsonMainNode = jsonResponse.optJSONArray("productos");
 
  for (int i = 0; i < jsonMainNode.length(); i++) {
   JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
   String name = jsonChildNode.optString("nombre");
   String apellido = jsonChildNode.optString("apellido");
   String apodo = jsonChildNode.optString("apodo");
   String telefono = jsonChildNode.optString("telefono");
   String outPut = name + " " + apellido + ""+apodo+""+telefono+"";
   lis.add(contacto("", outPut));
  }
 } catch (JSONException e) {
  Toast.makeText(getApplicationContext(), "Error" + e.toString(),
    Toast.LENGTH_SHORT).show();
 }
 
 SimpleAdapter simpleAdapter = new SimpleAdapter(this, lis,
   android.R.layout.simple_list_item_1,
   new String[] { "" }, new int[] { android.R.id.text1 });
 listView.setAdapter(simpleAdapter);
}
 
private HashMap<String, String> contacto(String name, String number) {
 HashMap<String, String> nombrecon = new HashMap<String, String>();
 nombrecon.put(name, number);
 return nombrecon;
}
}

Muchas gracias
Un saludo


2013/8/29 xerex <xere...@gmail.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Message has been deleted

Gabriel Pozo

unread,
Sep 10, 2013, 9:07:55 AM9/10/13
to desarrollad...@googlegroups.com
usando el método setText del TextView? 


El 10 de septiembre de 2013 07:28, xerex <xere...@gmail.com> escribió:
Hola buenos dias

Estoy probando con el codigo y tengo una pregunta, ¿se puede mostrar el resultado de la consulta en vez de en un ListView en varios TextView?¿Cómo?
Muchas gracias
Un saludo

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

xerex

unread,
Sep 12, 2013, 2:54:48 PM9/12/13
to desarrollad...@googlegroups.com
Muchas gracias Gabriel ya solucione el tema del textview, ahora estoy probando cambiando las bases de datos y tengo una duda 
Tengo una base de datos con varias tablas y en php hago la consulta a las distintas tablas y me muestra el resultado como quiero pero al intentar mostrarlo en el listview no lo consigo he probado cambiando y adaptando el codigo y nada.La base de datos trata de un club de basket y cada tabla es una categoria del club,muestra el resultado del partido,el dia del partido,la hora etc de los equipos de cada categoria y quiero que me muestre en el listview el ultimo partido jugado de cada categoria.
He intentado duplicar el metodo que tengo que se llama listar que creo que es el que recoge los datos y los muestras, pero sin resultado. Ya lo que me queda por probar es hacer una clase que extienda de AsyncTask para cada tabla, pero quiero saber si hay otra forma y còmo.
Muchas gracias 
Un saludo


public class MainActivity extends Activity {

private String  jsonResult;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.listView1);
 accessWebService();
}
 
  Listar();
  
  }
}
 
public void accessWebService() {
 JsonReadTask task = new JsonReadTask();
 
 task.execute(new String[] { url });
}
 
public void Listar() {                He probado duplicando este metodo y modificandolo para otra tabla 
List<Map<String, String>>lis = new ArrayList<Map<String, String>>();
 List<Map<String, String>>lis2 = new ArrayList<Map<String, String>>();
 
 try {
 JSONObject jsonResponse = new JSONObject(jsonResult);
  JSONObject jsonResponse2 = new JSONObject(jsonResult2);
  JSONArray jsonMainNode = jsonResponse.optJSONArray("juniorfem");
  JSONArray jsonMainNode2 = jsonResponse2.optJSONArray("juniormas");
 
  for (int i = 0; i < jsonMainNode.length(); i++) {
  JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
  String fecha = jsonChildNode.optString("fecha");
  String hora = jsonChildNode.optString("hora");
  String jornada = jsonChildNode.optString("jornada");
  String local = jsonChildNode.optString("local");
  String resultadolocal = jsonChildNode.optString("resultadolocal");
  String visitante = jsonChildNode.optString("visitante");
  String resultadovisitante = jsonChildNode.optString("resultadovisitante");
  String outPut = fecha + " " + hora + " " + jornada + " " + local + " " + resultadolocal + " " + visitante + " " + resultadovisitante + " " ;
  lis.add(contacto("", outPut));
  }
  
 } catch (JSONException e) {
  Toast.makeText(getApplicationContext(), "Error" + e.toString(),
    Toast.LENGTH_SHORT).show();
 }
 
 SimpleAdapter simpleAdapter = new SimpleAdapter(this, lis,
   android.R.layout.simple_list_item_1,
   new String[] { "" }, new int[] { android.R.id.text1 });
 listView.setAdapter(simpleAdapter);
}
 
private HashMap<String, String> contacto(String name, String number) {
 HashMap<String, String> nombrecon = new HashMap<String, String>();
 nombrecon.put(name, number);
 return nombrecon;
}
 
 
}

El lunes, 26 de agosto de 2013 13:35:13 UTC+2, xerex escribió:
Reply all
Reply to author
Forward
0 new messages