Также попрошу проанализировать код и сказать что в нём можно было бы улучшить. Спасибо.
class SenderThread extends AsyncTask<String, Void , String> {
private Socket socket;
InputStream sin;
OutputStream sout;
DataInputStream in;
DataOutputStream out;
Button get_string_button = (Button) findViewById(R.id.get_string_button);//Горит красным.
Button get_screen_button = (Button) findViewById(R.id.get_screen_button);
Button quit_button = (Button) findViewById(R.id.quit_button);
CloseSocket closeSocket = new CloseSocket();
@Override
protected void onPreExecute() {
super.onPreExecute();
.setEnabled(false);
}
@Override
protected String doInBackground(String... params) {
String line = null;
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < params.length; i++) {
strBuilder.append(params[i]);
}
String command = strBuilder.toString();
try{
if(socket == null){
socket = new Socket(ip, 6666);
sin = socket.getInputStream();
sout = socket.getOutputStream();
in = new DataInputStream(sin);
out = new DataOutputStream(sout);
}
if(socket.isConnected()) {
out.writeUTF(command);
out.flush();
line = in.readUTF();
if(line.equalsIgnoreCase("getScreen") ){
}
closeSocket.close(in,out,socket);//закрывает потоки и сокет
return line.toString();
}else{
throw new Exception("Socket not alive!");
}
}catch(Exception ex)
{
return ex.toString();
}
}
}
Читаем документацию:
Для работы с UI у AsyncTask есть 3 метода:
onPreExecute() - вызывается до doInBackground().onPostExecute() - вызывается, когда завершится doInBackground().onProgressUpdate() - срабатывает, когда вы в doInBackground() вызываете publishProgress().Если в AsyncTask вы осуществляете какую-то долгую операцию и хотите периодически обновлять состояние UI, используйте переопределённый onProgressUpdate() с вызовом publishProgress(). Иначе же переопределите onPostExecute(), и обращайтесь из него к UI, как завершите все операции.
К примеру, вы хотите после завершения операции в AsyncTask отправить строку в UI.
Определяем интерфейс:
public interface OperationResult {
void onGetString(String str);
}
Реализуете в вашей Activity:
public class MyActivity extends AppCompatActivity implements OperationResult {
public void onGetString(String str) {
// обрабатываете результата выполнения вашего `AsyncTask`
}
}
Немного меняете AsyncTask (добавляете конструктор, вызываете метод интерфейса).
public class SenderThread extends AsyncTask<String, Void , String> {
private OperationResult mCallBack;
public SenderThread(OperationResult callBack) {
mCallBack = callBack;
}
protected void onPostExecute(String result) {
mCallBack.onGetString(result);
}
}
Теперь когда создаёте ваш AsyncTask передавайте в конструктор ссылку на реализацию интерфейса. Если вы создаёте SenderThread прям в Activity, где реализуете интерфейс OperationResult, то передавайте в конструктор this.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости