#android #сокет #клиент_сервер
Здравствуйте, помогите пожалуйста! Есть Клиент под Android и сервер на java на pc - когда запускаешь с эмулятора - все работает - сообщения передаются. Когда запускаешь приложение на android устройстве - при нажатии на кнопку отправить всё вылетает. Очень нужна ваша помощь. Код Клиента: package com.example.client; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.net.Socket; import java.net.UnknownHostException; import com.example.client.R; import android.app.Activity; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private Socket client; private PrintWriter printwriter; private EditText textField; private Button button; private String messsage; String ip="192.168.0.80"; int port=80; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textField = (EditText) findViewById(R.id.textout); button = (Button) findViewById(R.id.send); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { messsage = textField.getText().toString(); Socket client =null; textField.setText(""); DataOutputStream dataOutputStream= null; DataInputStream dataInputStream = null; try { client = new Socket("192.168.0.80", 80); client.setSoTimeout(100); dataOutputStream = new DataOutputStream(client.getOutputStream()); dataInputStream = new DataInputStream(client.getInputStream()); dataOutputStream.writeUTF(messsage); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { System.out.println("Got an IOException: " + e.getMessage()); } } }); } }
Ответы
Ответ 1
Вы производите коннект с сервером в главном потоке, на реальном устройстве в новых версиях Android SDK это выкидывает исключение, а на эмуляторе работает. Вам нужно создать поток Thread или Runnable и вынести всю логику коннекта и связи на этот поток. Обновление Вот этот код внесите в run(): client = new Socket("192.168.0.80", 80); client.setSoTimeout(100); dataOutputStream = new DataOutputStream(client.getOutputStream()); dataInputStream = new DataInputStream(client.getInputStream()); dataOutputStream.writeUTF(messsage);Ответ 2
Почитайте следующие статьи Отзывчивое Android-приложение или 1001 способ загрузить картинку Процессы и потоки в Android: пишем AsyncTask правильно «Правильный» html парсинг
Комментариев нет:
Отправить комментарий