android - Sqlite 数据库查询在获取时出现一些问题

标签 android mysql database

问题是数据库查询出现了一些问题。我首先检查它是否存在于数据库中。如果它存在,那么我只是在从数据库获取后启动一个 Intent 。如果不存在,则从网络获取并放入数据库

这是我调用数据库函数的地方

protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    urlBlogtitle = mainBlogPost.get(position).title; // getting title of the clicked item
    Log.d(TAG, urlBlogtitle);
    summarygetter=databaseChecker(urlBlogtitle);
    if(summarygetter=="") new DownloadXmlTaskContent(MainListActivity.this).execute(URL);
    else startingIntent(summarygetter);
    // intitating the main object for Content parsing
}

这是我的databaseChecker方法

private String databaseChecker(String title) {

    DatabaseHandler db = new DatabaseHandler(MainListActivity.this);

    String content=" ";
    content = db.getContact(title);
    Log.d(TAG,content);
    return content;
}

这是我的数据库方法

String getContact(String title) {
    SQLiteDatabase db = this.getReadableDatabase();
    String content = " ";
    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                    KEY_TITLE, KEY_CONTENT }, KEY_ID + "=?",
            new String[] { title }, null, null, null, null);
    if (cursor != null){
        cursor.moveToFirst();}
    else
    {
        return content;
    }

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2));
    content=contact.title;
    // return contact
    return content;
}

这是错误的 logcat View 。

11-04 00:56:32.803    2560-2560/com.example.talha.appforblog E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.talha.appforblog, PID: 2560
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
        at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
        at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
        at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
        at com.example.talha.appforblog.DatabaseHandler.getContact(DatabaseHandler.java:82)
        at com.example.talha.appforblog.MainListActivity.databaseChecker(MainListActivity.java:102)
        at com.example.talha.appforblog.MainListActivity.onListItemClick(MainListActivity.java:91)
        at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
        at android.widget.AdapterView.performItemClick(AdapterView.java:300)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044)
        at android.widget.AbsListView$3.run(AbsListView.java:3833)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

最佳答案

问题是您没有检查 cursor.moveToFirst() 的返回值,如果没有条目,它将返回 false。而不是这个:

if (cursor != null){
    cursor.moveToFirst();}
else
{
    return content;
}

Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
        cursor.getString(1), cursor.getString(2));
content=contact.title;
// return contact
return content; 

试试这个:

if (cursor.moveToFirst()){
    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
        cursor.getString(1), cursor.getString(2));
    content=contact.title;
    // return contact
    return content; 
} else{ 
   return "Whatever_you_return_when_not_found"
}

关于android - Sqlite 数据库查询在获取时出现一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33507996/

相关文章:

android - COCOS2DX libpng Google Play 通知 2016 年 6 月

javascript - 在 touchstart 上播放音频

使用 phonegap 的 android tcp/ip 客户端

mysql - 如何在查询浏览器中创建表期间创建日期格式

mysql - 在 GROUP BY() 之后过滤数据,反之亦然?

android - 错误 : Could not access the Package Manager. 系统是否正在运行? - 在安卓工作室

php - 理解 Laravel 中的 hasOne() 和 belongsTo() 函数

mysql - 选择要从中选择数据的表名

sql - 在 JSON 列中搜索包含特定值的 JSON

mysql - SQL Server 和 MySql 中的密码限制