Да, вы можете просто поместить sendInteger в вашу AsyncTask. Мне нравится использовать конструктор вместо параметров AsyncTask, потому что он более гибкий. Вы можете реализовать интерфейс в качестве обратного вызова для получения ответа сервера внутри вашего пользовательского интерфейса. onPostExecute всегда будет вызываться системой сразу после выполнения onBackground. onPostExecute запускается также в потоке пользовательского интерфейса, поэтому вам не нужно возвращаться в свой поток пользовательского интерфейса, поскольку AsyncTask будет работать в другом потоке.
Ваш код будет выглядеть так:
Fragmentclass or Activity:
private void onButtonClick() {
...
RemoteClient rc = new RemoteClient(value, (response) -> {
Log.d(response);
};
rc.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
...
}
public class RemoteClient extends AsyncTask<Void, Void, Void> {
private Callback callback;
private int intValue;
public RemoteClient(int intValue, Callback callback) {
this.callback = callback;
this.intValue = intValue;
}
@Override
protected Void doInBackground(Void... arg0) {
Log.i("Socket","Connecting to the remote server: " + host);
try{
socket = new Socket(host,8025);
oos = new ObjectOutputStream(socket.getOutputStream());
sendInteger(intvalue);
} catch(IOException ex){
ex.printStackTrace();
}
return null;
}
private void sendInteger(int value) {
// send the integer
}
protected void onPostExecute(Void aVoid) {
if (callback != null) {
callback.response;
}
}
private interface Callback {
void serverResponse(String value);
}
}
Если вы хотите быть более гибким, вы можете реализовать класс NetworkManager, который просто запускает вашу асинхронную задачу. Затем вы всегда можете передать String как JSON в AsyncTask. Или вы просто используете AsyncTask, но тогда я бы рекомендовал использовать наследование.