#java #android #json #android-volley #wordpress-rest-api
#java #Android #json #android-volley #wordpress-rest-api
Вопрос:
Я использую WordPress rest API для извлечения данных, и я извлекаю только 10 сообщений одновременно, используя volley.
Когда я запрашиваю API в браузере, он выдает мне результат менее чем за 6-7 секунд…
Но моему приложению требуется более 15 секунд, чтобы отобразить эти 10 сообщений.
Иногда для отображения данных требуется более 1 минуты.
Я даже добавил параметр, позволяющий получать только 2 сообщения на страницу. Но время отклика такое же.
Я ищу и изменяю код в течение 2 дней, но не могу от него избавиться.
Вот код:-
private void jsonrequest(int pageNo) {
JSON_URL = "https://jamuitoday.com/wp-json/wp/v2/posts?_embedamp;page=" pageNo;
JsonArrayRequest request = new JsonArrayRequest(JSON_URL, response -> {
JSONObject jsonObject;
for (int i = 0; i < response.length(); i ) {
try {
isLoading = true;
isNewsLoaded = false;
jsonObject = response.getJSONObject(i);
News news = new News();
//Get News Link
String link = jsonObject.getString("link");
news.setLink(link);
//Set Date
String date = jsonObject.getString("date");
String d = date.substring(0, 10);
int time = Integer.parseInt(date.substring(11, 13));
if (time > 12) {
String ti = date.substring(13, 16);
String dt = d " " (time - 12) ti " PM";
news.setdate(dt);
} else {
String ti = date.substring(11, 16);
String dt = d " " ti " AM";
news.setdate(dt);
}
//Set Title
JSONObject title = jsonObject.getJSONObject("title");
String titleren = title.getString("rendered");
news.setName(titleren);
//Set Description
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
JSONObject desc = jsonObject.getJSONObject("content");
String descSub = desc.getString("rendered");
news.setDescription(String.valueOf(Html.fromHtml((descSub))));
news.setAdImgUrl(descSub);
// Set Image
JSONObject img = new JSONObject(jsonObject.getString("_embedded"));
JSONArray ttt = img.getJSONArray("wp:featuredmedia");
String s = "";
for (int t = 0; t < ttt.length(); t ) {
JSONObject obj = ttt.getJSONObject(t);
s = obj.getString("source_url");
}
news.setImage_url(s);
listNews.add(news);
} catch (JSONException e) {
e.printStackTrace();
}
}
setuprecyclerview(listNews);
isLoading = false;
isNewsLoaded = true;
pageNumber = 1;
if (recyclerView.getLayoutManager() != null) {
recyclerView.getLayoutManager().scrollToPosition(currentListPosition);
}
if (shimmerFrameLayout.isShimmerVisible()) {
shimmerFrameLayout.stopShimmer();
shimmerFrameLayout.setVisibility(View.GONE);
}
if (swipyRefreshLayout.isRefreshing()) {
swipyRefreshLayout.setRefreshing(false);
}
}, error -> {
});
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(request);
}
Есть какой-нибудь хак, который может ускорить это?
Я реализую SQLite для хранения данных и отображения при запуске приложения. Таким образом, пользователь не может почувствовать время загрузки.
Комментарии:
1. Я бы попросил вас обратить внимание на две вещи 1. Библиотека подкачки Android как мы видим, вы используете какую-то страницу. 2. Я буду рекомендовать использовать одноэлементный шаблон для volley
2. @SayokMajumder спасибо. Я попробовал шаблон singleton, и это действительно улучшает скорость. Но не понял, что это делает и как работает? и поиск руководств по библиотеке подкачки. Спасибо, приятель.
3. @SayokMajumder есть ли какой-либо способ заставить мое приложение использовать большую скорость Интернета вместо совместного использования с фоновой системой и приложениями.
4. Еще одна вещь, о которой я забыл упомянуть, — это проверить, загружается ли какое-либо изображение в том же потоке или нет. И просто для целей тестирования преобразуйте JsonArrayRequest в StringRequest и запишите строку ответа и проверьте, увеличивается ли скорость.
5. Karan проверьте профилировщик Android, чтобы узнать, сколько Интернета используется вашим приложением. Я не думаю, что есть какой-либо способ увеличить объем Интернета, выделенный приложению.