2011-04-18 7 views
6
s=new Scanner(new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()))); 

     while(s.hasNext()){ 
      System.out.println("Am intrat in bucla s:"); 
      longitude=Integer.parseInt(s.next()); 
      System.out.println("Valoare longitudine:"+longitude); 
      latitude=Integer.parseInt(s.next()); 
      System.out.println(latitude); 

estoy usando las líneas anteriores para leer algunos datos de una conexión cliente-servidor; este es el side.The servidor de datos se leen en el escáner s y después de eso trato de mostrarlo, pero cuando miro en logcat tengo nada más que la pantalla esta excepción:mal uso de los BufferedReader

04-18 00: 07: 56.138: INFO/global (295): tamaño de búfer predeterminado utilizado en BufferedReader constructor. Sería ser mejor ser explícito si se requiere un búfer de 8k .

Tanto mi cliente como el servidor están en Android. ¿Alguien tiene alguna idea de lo que estoy haciendo mal?

Éste es cómo leer los datos, envío de latitud y longitud, supongo que es espacios en blanco delimitados, lo extraño es que a veces se trabaja:

 Cursor c=db.getAllData(); 

      if(c.moveToFirst()) 
      { 
       do{ 

        longitude=Integer.parseInt(c.getString(1)); 
        out.println(longitude); 
        latitude=Integer.parseInt(c.getString(2)); 
        out.println(latitude); 

       }while(c.moveToNext()); 

      } 

Respuesta

1

Se encuentran los datos de espacios en blanco delimitados? De lo contrario, deberá especificar un delimitador para su escáner.

Tiene algún código de manejo de excepciones que no se muestra ... p. ¿Oculta una NumberFormatException si el parseInt falla?

Mientras depura este problema (a menos que pueda adjuntar un depurador), puede registrar mensajes en puntos como cuando acepta una nueva conexión de cliente y cuando ingresa y sale de su cadena de trabajo. Esto podría ayudarlo a ver si está llegando a escanear los datos cuando cree que está recibiendo.

+0

He editado mi pregunta con la forma en que envío los datos y está en blanco el espacio delimitado :) – adrian

+0

Mira aquí, está todo el código aquí, en WorkerRunnable Leo estos datos: http://stackoverflow.com/questions/5701674/how-to-verify-multithreading-server-in-android – adrian

+0

¿Has mirado el código? Bueno, he usado mensajes y los usé exactamente antes de escanear los datos ... y se muestran en el logcatr , pero los datos en sí no se muestran ... y realmente no sé lo que está mal y no tengo a nadie que me ayude:) ... Thx – adrian

3

El mensaje parece ser para la construcción BufferedReader.

Primero, no creo que esté haciendo algo "incorrecto", ya que está diciendo que el código funciona como se esperaba y el mensaje es "INFO", no "ERROR" o incluso "ADVERTENCIA".

En segundo lugar, si nos fijamos en la BufferedReader constructor, verá:

BufferedReader (lector de, int size) Construye un nuevo BufferedReader, proporcionando con caracteres de tamaño de búfer.

http://developer.android.com/reference/java/io/BufferedReader.html

usar que el constructor lugar y no debería ver ese mensaje.

BTW, el logcat está lleno de resultados, algunas líneas son más relevantes que otras.


Uso Log.d en lugar de System.out.println(). En cuanto a System.out: http://developer.android.com/guide/developing/tools/adb.html

Viendo el stdout y stderr

Por defecto, el sistema Android envía stdout y stderr (System.out y System.err) de salida a/dev/null.En los procesos que ejecutan la VM Dalvik, puede hacer que el sistema escriba una copia de en el archivo de registro. En este caso , el sistema escribe los mensajes en el registro mediante el registro de las etiquetas stdout y stderr , ambos con prioridad I.

Para dirigir la salida de esta manera, se detener una ejecución emulador/dispositivo instancia y luego use el comando shell set para habilitar la redirección de salida . Así es como usted lo hace :

$ adb shell parada $ adb shell setprop log.redirect-stdio cierto $ adb shell empezar

El sistema conserva este ajuste hasta usted termina el emulador/dispositivo instancia . Para usar la configuración como un valor predeterminado en la instancia del emulador/dispositivo , puede agregar una entrada al /data/local.prop en el dispositivo.

+0

Quiero ver mis datos, el mensaje no se muestra un problema :))) .. Gracias u :) – adrian

+0

Y no, el código no funciona a la espera, no muestra ningún dato en el logcat !!! Dije que funciona bien ... no, no lo hace de lo contrario, no estaría aquí orando por alguien t o ven y dime lo que hago mal :) – adrian

+0

@adrian comprueba la respuesta actualizada – Aleadam

Cuestiones relacionadas