Здравствуйте, помогите пожалуйста! Есть Клиент под 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());
}
}
});
}
}
Ответ
Вы производите коннект с сервером в главном потоке, на реальном устройстве в новых версиях 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);
Комментариев нет:
Отправить комментарий