Медленная фоновая задача и частые сбои (приложение, использующее NewsAPI) - PullRequest
0 голосов
/ 21 января 2019

Я работаю над приложением новостей, используя 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 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...