Aim
Во фрагменте у меня есть панель поиска, которая ищет онлайн-новости о том, что набрал пользователь. Я хотел бы отобразить эти новости (название + описание + дата публикации + ... и т. Д.) В графическом интерфейсе как вертикальные блоки.
Осуществление
Пояснения
Во фрагменте при обработке события поиска я создал асинхронную задачу и выполнил ее с помощью API-интерфейса REST URL, который я использую для поиска.
В асинхронной задаче я использую этот REST API (благодаря URL-адресу и некоторым необходимым параметрам в качестве ключа авторизации и т. Д.). Когда мое асинхронное задание получает ответ, оно должно обновить графический интерфейс фрагмента (, т. Е. оно должно вертикально складывать блоки графического интерфейса пользователя, содержащие заголовки, описания и т. Д. Полученных новостей).
Источники
Вы найдете источники в последней части этого вопроса.
Мой вопрос
В асинхронной задаче (точнее: в ее функции, которая выполняется после получения ответа), я не знаю, как получить вызывающий фрагмент. Как это сделать?
Источники
Фрагмент части
private void getAndDisplayNewsForThisKeywords(CharSequence keywords) {
keywords = Normalizer.normalize(keywords, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
new NetworkUseWorldNews().execute("https://api.currentsapi.services/v1/search?keyword=" + keywords + "&language=en&country=US");
}
Асинхронная часть задачи
public class NetworkUseWorldNews extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String[] urls) {
StringBuilder string_builder = new StringBuilder();
try {
URL url = new URL(urls[0]);
HttpsURLConnection https_url_connection = (HttpsURLConnection) url.openConnection();
https_url
_connection.setRequestMethod("GET");
https_url_connection.setDoOutput(false);
https_url_connection.setUseCaches(false);
https_url_connection.addRequestProperty("Authorization", "XXX");
InputStream input_stream = https_url_connection.getInputStream();
BufferedReader buffered_reader = new BufferedReader(new InputStreamReader(input_stream));
String line;
while((line = buffered_reader.readLine()) != null) {
string_builder.append(line);
}
buffered_reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return string_builder.toString();
}
@Override
protected void onPostExecute(String result) {
try {
JSONObject news_response_http_call = new JSONObject(result);
switch(news_response_http_call.getString("status")) {
case "ok":
JSONArray news = news_response_http_call.getJSONArray("news");
for(int i = 0; i < news.length(); i++) {
JSONObject a_news = news.getJSONObject(i);
String title = a_news.getString("title");
String description = a_news.getString("description");
String date_of_publication = a_news.getString("published");
String url = a_news.getString("url");
String image = a_news.getString("image");
System.out.println(title + ": " + date_of_publication + "\n" + image + "\n" + url + "\n" + description);
WorldNewsFragment world_news_fragment = ...;
}
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}