Изучаю Android. Есть сервер наPython, он ждет поключения клиентов(клиенты тоже на Python), после подключения клиенты посылают команды сервера, а он в ответ присылает ответ(все отлично работает). Теперь задача заменить Python клиентов клиентов на Android. Подключение к серверу проиходит, он принимает от клиента команду "get", сервер посылает сразу ответ. Как мне получать в Android эти данные? И еще: я так понимаю, отправку команд и прием данных лучше вынести в отдельный поток?
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.net.Socket;
import java.net.UnknownHostException;
public class LoginActivity extends AppCompatActivity {
Button buttonEnter;
TextView textviewHeader;
Handler handler;
Socket client = null;
DataOutputStream dataToServerStream = null;
DataInputStream dataFromServerStream = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
buttonEnter = (Button) findViewById(R.id.buttonEnter);
textviewHeader = (TextView) findViewById(R.id.textViewHeader);
//хандлер класс
class MyHandler extends Handler {
WeakReference<LoginActivity> wrActivity;
public MyHandler(LoginActivity activity) {
wrActivity = new WeakReference<>(activity);
}
@Override
public void handleMessage(android.os.Message msg){
super.handleMessage(msg);
LoginActivity activity = wrActivity.get();
if (activity != null)
switch (msg.what){
case 0:
activity.textviewHeader.setText("Подключение к серверу...");
break;
case 1:
Toast toast = Toast.makeText(getApplicationContext(),msg.obj.toString(), Toast.LENGTH_LONG);
toast.show();
case 2:
activity.textviewHeader.setText("Войдите в приложение");
activity.buttonEnter.setEnabled(true);
break;
}
}
}
handler = new MyHandler(this);
//новый поток
Thread threadConnect = new Thread(new Runnable() {
Message msg;
@Override
public void run() {
handler.sendEmptyMessage(0);
//подключение к серверу
try {
client = new Socket("localhost", 1605);
client.setSoTimeout(100);
dataToServerStream = new DataOutputStream(client.getOutputStream());
dataFromServerStream = new DataInputStream(client.getInputStream());
//отправка данных на сервер
dataToServerStream.writeUTF("get");
//чтение данных с сервера
msg = handler.obtainMessage(1,0,0, dataFromServerStream.readUTF());
handler.sendMessage(msg);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
System.out.println("Got an IOException: " + e.getMessage());
}
handler.sendEmptyMessage(2);
}
});
threadConnect.start();
//обработчик нажатий
View.OnClickListener OnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.buttonEnter:
textviewHeader.setText("ыааыаыаыа");
break;
}
}
};
buttonEnter.setOnClickListener(OnClickListener);
}
}