Страница 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 запросы в главном потоке :lol:

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();
Все заработало. Всем спасибо