Вбесявам се, опитвайки се да прочета данни от сокет. Опитах всичко и всичко, мисля, че кодът ми трябва да работи, но не успя.
Моето намерение е да стартирам само следния метод на onCreate. Първо създавам нишка, за да изпълнявам всички неща, които са свързани с мрежата. След това създавам обекта scoket и чета входния поток на сокета. В този момент, в безкраен цикъл, прочетох входния поток с помощта на readLine, както беше обяснено в този отговор. Накрая правя каквото искам с данните, които идват от сокета.
Не знам колко данни ще бъдат изпратени от сървъра. И ще бъде в json, но това няма значение.
Ето моя код
public void receiveMsgs(){
new Thread(new Runnable(){
@Override
public void run() {
BufferedReader in = null;
try {
Log.d("NETWORK-RECEIVE", "Trying to connect to socket...");
Socket socket;
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddr, SERVERPORT);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if(socket.isConnected()){
Log.d("NETWORK-RECEIVE", "The connection have been stablished");
}
} catch (IOException e) {
e.printStackTrace();
Log.d("NETWORK-RECEIVE", "Something goes wrong: IOException");
}
while(true){
String msg = null;
try {
StringBuilder total = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
total.append(line);
}
msg = total.toString();
Log.d("NETWORK-RECEIVE","Message readed!:"+msg);
} catch (IOException e) {
e.printStackTrace();
Log.d("NETWORK-RECEIVE", "Something goes wrong: IOException");
}
if(msg == null){
Log.d("NETWORK-RECEIVE", "Message is null");
break;
}
else{
//Do what I want
Log.d("NETWORK-RECEIVE", "something");
}
}
}
}).start();
}
isConnected()
тест е безсмислен. Ако гнездото не се свърже, щеше да бъде хвърлено изключение, така че тестът щеше да бъде недостъпен. И ако изключението бъде хвърлено, не трябва да попадате в I/O код, който приема, че не е така. Цялата ви обработка на изключения е зле структурирана: напримерmsg == null
може да означава, че не са изпратени данни или е възникнало изключение. Смесваш двете условия. - person user207421   schedule 09.12.2013