Java 通过Jsoup进行更新工作不正常
基本上,我想更新我的应用程序的数据库从网页获取数据。。。我写了这个类来处理我的目标:Java 通过Jsoup进行更新工作不正常,java,android,sqlite,jsoup,updates,Java,Android,Sqlite,Jsoup,Updates,基本上,我想更新我的应用程序的数据库从网页获取数据。。。我写了这个类来处理我的目标: private class updateDatabase extends AsyncTask<Void, Void, String> { String html, minerals, url; List<String> allMinerals; boolean alreadyHas = false; int isFavorite; @Overri
private class updateDatabase extends AsyncTask<Void, Void, String> {
String html, minerals, url;
List<String> allMinerals;
boolean alreadyHas = false;
int isFavorite;
@Override
protected String doInBackground(Void... params) {
url = "http://minerais.cf/app.php";
allMinerals = dbHandler.getAllMineraisNames("external");
int i, j;
try {
org.jsoup.nodes.Document doc = Jsoup.connect(url).get();
html = doc.toString();
minerals = Jsoup.parse(html).text();
} catch (IOException e) {
e.printStackTrace();
}
String[] elemento = minerals.split("959");
for(i=0; i<elemento.length-1; i++){
alreadyHas = false;
String[] dados = elemento[i].split("858");
for(j=0; j<allMinerals.size()-1; j++){
if(dados[0].equals(allMinerals.get(j))){
alreadyHas = true;
if(dbHandler.isFavorite(allMinerals.get(j))){
isFavorite = 1;
}
else{
isFavorite = 0;
}
}
}
if(alreadyHas){
Mineral updating = new Mineral(
i,
dados[0],
dados[1],
dados[2],
dados[3],
dados[4],
dados[5],
dados[6],
dados[7],
dados[8],
dados[9],
dados[10],
dados[11],
dados[12],
dados[13],
dados[14],
dados[15],
dados[16],
dados[17],
isFavorite
);
dbHandler.updateMineral("external", updating);
}
else{
Mineral adding = new Mineral(
allMinerals.size(),
dados[0],
dados[1],
dados[2],
dados[3],
dados[4],
dados[5],
dados[6],
dados[7],
dados[8],
dados[9],
dados[10],
dados[11],
dados[12],
dados[13],
dados[14],
dados[15],
dados[16],
dados[17],
isFavorite
);
dbHandler.addMineral("external", adding);
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
loadList("");
}
@Override
protected void onPreExecute() {
}
}
我做错了什么?提前感谢提示在您的stacktrace中:
Caused by: android.database.CursorIndexOutOfBoundsException:
Index 0 requested, with a size of 0
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)
at cf.minerais.DatabaseHandler.isFavorite(DatabaseHandler.java:164)
错误出现在isFavorite()
中,您不支持光标移动:
if (cursor != null)
cursor.moveToFirst();
(IDE中可能有一个警告,您忽略了moveToFirst()
的返回;这些都是值得注意的。)
select
查询没有返回任何行(与名称不匹配),因此没有要移动到的第一行,因此当调用cursor.getInt(0)
时,将抛出索引越界。做一些类似于:
if (cursor != null) {
boolean hasResult = cursor.moveToFirst();
if (!hasResult) return false;
}
我建议输入一堆调试日志(或者在调试器中进行单步调试),这样您就可以看到正在传递的输入以及失败的地方
if (cursor != null)
cursor.moveToFirst();
if (cursor != null) {
boolean hasResult = cursor.moveToFirst();
if (!hasResult) return false;
}