Здравствуйте! Попал в тупик: У меня есть приложение которое, при старте, и\или при команде юзера делает запрос на сервер(GET). Во время запроса приложение не отвечает несколько секунд( даже при том что сервер в локалке). В гугле нашел решение - AsyncTask, теперь запрос делается рядом в основном потоке, не мешая ему. Однако мне нужно обработать ответ сервера, для этого я вызываю метод get(), который , внимание, блокирует поток, и теряется вся суть использования AsyncTask. Вопрос: как асинхронно получить ответ с сервера без фризов ui потока?
server.javapackage com.oralo.server_notepad;
import android.os.AsyncTask;
import android.util.Log;
import androidx.core.util.Consumer;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
class NotepadServer extends AsyncTask<String, Void, String> {
private static String API;
private static String TAG = "NOTEPAD_LOG";
public NotepadServer(String api){
API = api;
}
@Override
protected String doInBackground(String... method) {
try {
URL url = new URL(API + method[0]);
System.out.println(Arrays.toString(method));
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Accept-Encoding", "identity");
con.setRequestProperty("secret", "1001");
try (final BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
String inputLine;
final StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
return content.toString();
}
} catch (final Exception ex) {
ex.printStackTrace();
}
return "404";
}
}
Использую тутsendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
server = new NotepadServer(API);
server.execute("add?login=" + login + "&password=" + password + "&body=" + editText.getText().toString());
editText.setText("");
try {
Log.i("server:response", server.get());//тут поток останавливается и ждет ответа
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
});