bufferedreader отстает на одну строку на реальном устройстве

У меня есть сокет-клиент, который я использую для получения данных с сервера. В эмуляторе все работает хорошо, однако на моем Android сообщения всегда отстают, поэтому мой графический интерфейс не обновляется новыми данными.

Используемый код (клиент работает в асинтаске)

@Override
protected Boolean doInBackground(Void... params) { //This runs on a different thread
    try {
        Log.i("AsyncTask", "doInBackground: Creating socket");
        SocketAddress sockaddr = new InetSocketAddress("192.168.x.xxx", 9090);
        nsocket = new Socket();
        nsocket.connect(sockaddr, 5000); //10 second connection timeout
        if (nsocket.isConnected()) { 

            in = new BufferedReader(new InputStreamReader(nsocket.getInputStream()));
            wr = new BufferedWriter(new OutputStreamWriter(nsocket.getOutputStream()));
            Log.i("KMC.AsyncTask", "doInBackground: Socket created, streams assigned");
            sockState = true;

            String inputLine = "";
            while ((inputLine = in.readLine()) != null) {
                result = inputLine.replace("\\","");
                Log.d("KMC", "Got some data: " + result);
                this.publishProgress(1);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
        Log.i("KMC.AsyncTask", "doInBackground: IOException");
    } catch (Exception e) {
        e.printStackTrace();
        Log.i("KMC.AsyncTask", "doInBackground: Exception");
    } finally {
        try {
            nis.close();
            wr.close();
            nsocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.i("KMC.AsyncTask", "doInBackground: Finished");
    }
    return true;
}
protected void onProgressUpdate(Integer... values) {
      try {
            JSONObject jObject = new JSONObject(result.substring(1, result.length()-1));
            if(jObject.getString("type").equals("event")){
                EventHandler.newEvent(jObject.getString("name"), jObject.getJSONArray("data"));
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

Я пытался найти решение в Google, но я ничего не могу найти по этому поводу.


person Peter Elzinga    schedule 02.05.2012    source источник
comment
см. этот stackoverflow.com/questions/706105/   -  person Zaz Gmy    schedule 02.05.2012
comment
Я добавляю \r\n к каждой передаче. Кроме того: на эмуляторе работает хорошо, но не на моем телефоне (как на ICS, так и на имбире)   -  person Peter Elzinga    schedule 02.05.2012


Ответы (1)


Решение:

Я изменил сервер, чтобы отправить двойное "\r\n", что как-то решило это.

person Peter Elzinga    schedule 02.05.2012