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