#android #android-intent #android-activity
#Android #android-намерение #android-активность
Вопрос:
У меня есть два действия. Один — LoginScreen
это, а другой — это MainScreen
. После входа в систему я запускаю главный экран. На главном экране запускается метод асинхронного tcp-клиента onCreate
. Затем я нажимаю кнопку «Назад», чтобы перейти на экран входа в систему. Затем я снова вхожу в систему, но в нем говорится, что TcpClient равен null. Я получаю новый экземпляр TcpClient при запуске activity onCreate, но он равен нулю. Вот мой код.
//Main activity codes.
TCPClient mTcpClient;
protected void onCreate(Bundle savedInstanceState) {
try {
cnnTask = new connectTask();
cnnTask.execute("");
} catch (Exception e) {
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
}
public class connectTask extends AsyncTask<String, String, TCPClient> {
protected TCPClient doInBackground(String... message) {
//we create a TCPClient object
mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
@Override
//here the messageReceived method is implemented
public void messageReceived(String message) {
//this method calls the onProgressUpdate
srvrMessage = message;
}
});
mTcpClient.run();
return null;
}
}
}
//LoginScreen code onClick.
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.btnLogin:
intent = new Intent(LoginScreen.this,MainScreen.class);
startActivity(intent);
break;
}
}
Как я уже упоминал ранее, при первом входе в систему запускается программа. Однако, когда я возвращаюсь к LoginScreen и пытаюсь снова войти в систему, новый mTcpClient имеет значение null.
Я пытался остановить mpTcpClient onDestroy
и onStop
метод действия на главном экране, но это не сработало. Как я могу решить эту проблему?
Комментарии:
1. Попробуйте переместить блок
connectTask
создания и выполнения изonCreate
метода вonResume
метод.2. Не вижу проблемы. Каждый раз при запуске
MainScreen
TCPClient
будет создаваться новый.3. Да, это может создать новое соединение, но mTcpClient имеет значение null :/
Ответ №1:
Я нашел свою ошибку. Мой клиентский сервер TCP ожидает, пока с сервера не поступит байт. Таким образом, не имеет значения, отменять задачу. Он ожидает чтения байта. Я закрыл потоковый onCancelled
метод задачи, и он работает.