неправильное использование BufferedReader - PullRequest
6 голосов
/ 18 апреля 2011
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);

Я использую строки выше, чтобы прочитать некоторые данные из соединения клиент-сервер, это на стороне сервера. Данные читаются в сканерах, и после этого я пытаюсь их отобразить, но когда я смотрю в logcat, я не отображать ничего, кроме этого исключения:

04-18 00: 07: 56.138: INFO / global (295): Размер буфера по умолчанию используется в Конструктор BufferedReader. Было бы лучше быть явным, если 8k-char требуется буфер.

Мой клиент и сервер работают на Android! Кто-нибудь знает, что я делаю неправильно?

Вот как я читаю данные, отправляю широту и долготу, я предполагаю, что это пробелы, разделенные пробелами, странно то, что иногда работает:

        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());

             }

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

Похоже, что сообщение относится к конструкции BufferedReader.

Во-первых, я не думаю, что вы делаете что-то «неправильно», поскольку вы говорите, что код работает, как ожидается, и сообщение «INFO», а не «ERROR» или даже «WARNING».

Во-вторых, если вы посмотрите на конструктор BufferedReader, вы увидите:

BufferedReader (Reader in, int size) Создает новый BufferedReader, предоставляя с размером символов буфера.

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

Используйте этот конструктор вместо этого, и вы не должны видеть это сообщение.

Кстати, logcat полон вывода, некоторые строки более актуальны, чем другие.


Используйте Log.d вместо System.out.println(). Относительно System.out: http://developer.android.com/guide/developing/tools/adb.html

Просмотр stdout и stderr

По умолчанию система Android отправляет стандартный вывод и стандартный вывод (System.out и System.err) вывод в / dev / null. В процессы, которые запускают Dalvik VM, вы может заставить систему написать копию вывод в файл журнала. В этом случай, система пишет сообщения в журнал с помощью тегов журнала stdout и stderr, оба с приоритетом I.

Чтобы направить вывод таким образом, вы остановить работающий эмулятор / устройство экземпляр, а затем использовать оболочку Команда setprop, чтобы включить перенаправление вывода. Вот как ты сделай это:

$ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell начать

Система сохраняет этот параметр до вы завершаете эмулятор / устройство пример. Чтобы использовать настройку как по умолчанию на эмуляторе / устройстве Например, вы можете добавить запись в /data/local.prop на устройстве.

1 голос
/ 18 апреля 2011

Размещены ли ваши пробелы в данных?Если нет, вам нужно будет указать разделитель для вашего сканера.

У вас есть код обработки исключений, который вы не показываете ... например, скрытие NumberFormatException, если parseInt не удалось?

Во время отладкиЭта проблема (если вы не можете подключить отладчик), вы можете записывать сообщения в такие моменты, как когда вы принимаете новое клиентское соединение и когда вы входите и выходите из своего рабочего потока.Это может помочь вам понять, насколько далеко вы сканируете данные, когда вы думаете, что получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...