Страница 1 из 1
на андроид 4 валится на new Socket
Добавлено: 02 авг 2012, 15:53
Михаил
В предыдущих версиях работало все отлично, как обновился до 4 версии стало вылетать приложение на строке:
s = new Socket(host, port);
Что может быть?
Re: на андроид 4 валится на new Socket
Добавлено: 02 авг 2012, 17:10
rezak90
и что с одной строки можно понять?
чисто пальцем в небо - может такая быть хрень что если такое дело делаешь в главном потоке то приложение сразу fail (то ли с 3 то ли с 4-го дроида такая фича).
З.Ы. хотя индусы как то умудрились обрабатывать http запросы в главном потоке

Re: на андроид 4 валится на new Socket
Добавлено: 02 авг 2012, 19:20
Mikhail_dev
С третьей версии запрещено в главном потоке делать запросы. Но вот ведь беда, а свои то классы ака android.не_помню.Geocoder , который отвечает за геокодинг координат, может работать с основного потока =)
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 09:02
Михаил
Подскажите как запустить в другом потоке. По нажатию кнопки создаю соединение:
ServerConnect = new ServerConnect(Server, Port);
в классе ServerConnect:
Код: Выделить всё
public ServerConnect(String host, int port) {
try {
// создаем сокет
s = new Socket(host, port);
socketReader = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"));
socketWriter = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(), "UTF-8"));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 11:36
rezak90
Михаил в предоставленных автором сайта есть уроки где затрагивается тема о потоках (AsuncTask, Handler), так что дерзай =)
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 11:37
Finch
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 11:38
k.chaiko
А почему не использовать класс Thread ??
Создаем новый поток и стартуем его..
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 11:47
Михаил
rezak90 писал(а):Михаил в предоставленных автором сайта есть уроки где затрагивается тема о потоках (AsuncTask, Handler), так что дерзай =)
Ок, почитаю. Просто разобраться нужно как всегда быстро, а что читать сразу и не сообразишь =)
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 11:56
Михаил
k.chaiko писал(а):А почему не использовать класс Thread ??
Создаем новый поток и стартуем его..
Глянул Thread. Используется конструкция типа new Thread(....).start()
а как при этом получить экземляр класса, который запускаю в моем примере ServerConnect = new ServerConnect(Server, Port)?
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 12:06
k.chaiko
Михаил писал(а):k.chaiko писал(а):А почему не использовать класс Thread ??
Создаем новый поток и стартуем его..
Глянул Thread. Используется конструкция типа new Thread(....).start()
а как при этом получить экземляр класса, который запускаю в моем примере ServerConnect = new ServerConnect(Server, Port)?
Вы инициализируете ServerConnect по средствам конструктора, я правильно понял ??
Хм..Сейчас немного занят работой конечно, на первую вскидку, можно попробывать сделать объект serverConnect глобальной переменной и просто проводить его инициализацию в новом потоке(Runnable, Thread, Handler)? хотя мб это и плохое решение, тогда нужно подумать будет..а может кто предложит вариант по красивее ещё..
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 12:19
Михаил
k.chaiko писал(а):
Вы инициализируете ServerConnect по средствам конструктора, я правильно понял ?
Да. Делаю инициализацию, а потом в программе использую еще методы ServerConnect.
k.chaiko писал(а):
можно попробывать сделать объект serverConnect глобальной переменной
у меня стоит public static ServerConnect ServerConnect; в том классе из которого вызываю ServerConnect = new ServerConnect(Server, Port);
Re: на андроид 4 валится на new Socket
Добавлено: 03 авг 2012, 15:00
Михаил
Сделал так:
Код: Выделить всё
Thread t = new Thread(new Runnable() {
public void run() {
String Server = etServer.getText().toString();
int Port = Integer.parseInt(etPort.getText().toString());
ServerConnect = new ServerConnect(Server, Port);
ServerConnect.Send("Hello server!");
}
});
t.start();
Все заработало. Всем спасибо