Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缓慢的后台任务和频繁的崩溃(应用程序使用NewsAPI)_Java_Android_Performance - Fatal编程技术网

Java 缓慢的后台任务和频繁的崩溃(应用程序使用NewsAPI)

Java 缓慢的后台任务和频繁的崩溃(应用程序使用NewsAPI),java,android,performance,Java,Android,Performance,我正在使用newsapi开发一个新闻应用程序。我有一个主页可以下载排名前15位的文章,还有一个页面也可以下载,但是是从HackerNewsAPI下载的。每次我从Android Studio运行应用程序时,它都会在填充列表视图之前显示几分钟的白色屏幕 我试着限制下载速度,检查SQLite索引和StackOverflow的其他内容,但我似乎无法解决我的问题 当我转到hackernews页面并单击列表时,应用程序将刷新自身并返回主页 当从仿真器运行应用程序时,它要么进入hackernews而不加载主

我正在使用newsapi开发一个新闻应用程序。我有一个主页可以下载排名前15位的文章,还有一个页面也可以下载,但是是从HackerNewsAPI下载的。每次我从Android Studio运行应用程序时,它都会在填充列表视图之前显示几分钟的白色屏幕

我试着限制下载速度,检查SQLite索引和StackOverflow的其他内容,但我似乎无法解决我的问题

  • 当我转到hackernews页面并单击列表时,应用程序将刷新自身并返回主页
  • 当从仿真器运行应用程序时,它要么进入hackernews而不加载主页,要么崩溃
  • java.lang.IndexOutOfBoundsException:单击listview中的最后一项时索引:1,大小:1
  • 应用程序将只加载2篇文章,并给我一个java.io.FileNotFoundException:。。。错误。这是因为API中的URL不起作用(在浏览器中测试)
主页

@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
         }       
尝试排除故障后,我提出了几个问题:

  • 如何加快新闻文章的背景任务
  • 如何打开应用程序并启动后台下载,而不会因为indexOutOfBounds而崩溃
  • 如何为当前活动赋予下载优先级,而不是一次下载所有内容
  • 如何跳过断开的链接并继续获取其余的文章?应用程序在该点停止下载[修复:用Try/Catch包围InputStream]

频繁崩溃
你的崩溃日志在哪里?你需要将它与问题共享。看一看粘贴你的崩溃日志。这些日志真的很奇怪。有时它根本不出现。如果有帮助的话,我可以pm GitHub链接。在doinbackground中,首先for循环索引值必须小于ur数组大小,您写16而不是数组大小,for(int I=0;I //SAME AS ABOVE