Я работаю над приложением новостей, используя newsapi.У меня есть домашняя страница, которая загружает 15 лучших статей, и еще одна страница, которая делает то же самое, но из api hackernews.Каждый раз, когда я запускаю приложение из Android Studio, оно показывает белый экран в течение нескольких минут перед заполнением списка.
Я пытался ограничить скорость загрузки, проверял индексы SQLite и другие вещи из StackOverflow, но не могу решить свою проблему.
- Когда я перехожу на страницу hackernews и нажимаю на список, приложение просто обновится и вернется на домашнюю страницу.
- При запуске приложения из эмулятора оно либо перейдетна hackernews без загрузки домашней страницы или просто сбой
- java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 при нажатии на последний элемент в просмотре списка
- Приложение загрузит только 2 статьи и даст мне Java.io.FileNotFoundException: https://www.summarizebot.com/api/summariz... ошибка.Это связано с тем, что URL из API не работает (проверено в браузере)
Домашняя страница
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
...
//START THE BACKGROUND TASK
task = new BackgroundTask();
String s = task.execute("https://newsapi.org/v2/top-headlines?country=us&apiKey").get();
...
//POPULATE LIST WITH DATABASE CONTENT
updateContent();
public void updateContent(){
...
if(cursor.moveToFirst()){
homeStories.clear();
homeLinks.clear();
}
if(cursor.getCount() > 0) {
do {
homeStories.add(cursor.getString(nameIndex));
homeLinks.add(cursor.getString(addressIndex));
} while (cursor.moveToNext());
adapter.notifyDataSetChanged();
}
//BACKGROUND TASK
public class BackgroundTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground (String...urls){
//GET JSON AND SUMMARIES IN SINGLE FOR LOOP FOR EACH ARTICLE
...
for (int i = 0; i < 16; i++) {
JSONObject content = jsonArray.getJSONObject(i);
...
//ADD TO DATABASE
database.execSQL("INSERT INTO trending (name, address) VALUES ('" + title + "','" + address + "')");
//GET THE SUMMARY OF EACH ARTICLE
url = new URL("https://www.summarizebot.com/api/summarize?...
JSONArray j2Array = new JSONArray(s1);
for (int j = 0; j < j2Array.length(); j++) {
JSONObject object2 = j2Array.getJSONObject(j);
s2 += object2.getString("sentence");
}
//END OF MAIN FOR LOOP
}
Страница Hackernews
//SAME AS ABOVE
После попыткиДля устранения неполадок я задал несколько вопросов:
- Как ускорить фоновые задачи для новостных статей?
- Как я могу открыть приложение и запустить фоновые загрузки без сбоев из-за indexOutOfBounds?
- Как я могу дать приоритет загрузки текущей активности вместо загрузки всего сразу?
- Как мне пропустить неработающие ссылки и продолжить получать остальные статьи?Приложение останавливает загрузку в этот момент [ ИСПРАВЛЕНО: Surround InputStream с Try / Catch ]