Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 通过Jsoup进行更新工作不正常_Java_Android_Sqlite_Jsoup_Updates - Fatal编程技术网

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;
}