2017-12-18 4 views
0

私はankoを使ってsqliteからデータを取得することを学んでいます。私は正常に(レコードが存在する場合)データを印刷することができますが、データが存在しない場合、私のアプリケーションは常にクラッシュします。レコードが存在するかアンコーを使用しているかを確認する方法は?

エラーは言う:

parseSingleは、私は、エラーの正確な意味を知っている単一のエントリ

でカーソルのみを受け入れ、私はちょうどそれを解決する方法を知りません。ここ

は、クエリのコードです:

fun getUserByUid(uid: Int): UserModel 
{ 
    val data = context.database.use { 
     val db = context.database.readableDatabase 
     val columns = UserModel.COLUMN_ID + "," + UserModel.COLUMN_NAME + "," + UserModel.COLUMN_API_KEY 

     val query = db.select(UserModel.TABLE_NAME, columns) 
       .whereArgs("(uid = {userId})", 
         "userId" to uid) 

     query.exec { 
      val rowParser = classParser<UserModel>() 
      parseSingle(rowParser) // this line that trigger error exception 
     } 
    } 

    return data 
} 

私は、レコードが存在しないか、いないかどうかを確認するためにqueryまたはrowParser変数にcount機能を見つけることを試みたが、それを見つけることができませんでした。

答えて

1

wikiページから。クエリを解析 https://github.com/Kotlin/anko/wiki/Anko-SQLite#parsing-query-results

だから我々はいくつかのカーソルを持って、そしてどのように我々は、通常のクラスにそれを解析することができます

結果? AnkoはparseSingle、parseOpt、parseListの関数を提供しています。

メソッド説明 parseSingle(rowParser):T正確に1つの行を解析します。 parseOpt(rowParser):T? 0または1行を解析する parseList(rowParser):Listゼロ個以上の行を解析する 受信したCursorに複数の行が含まれていると、parseSingle()およびparseOpt()が例外をスローすることに注意してください。

+0

私はparseSingleもnullレコードを受け入れると思った。大丈夫、parseListで試してみるつもりです。 – Kakashi

+0

それは動作します、ありがとう! – Kakashi

関連する問題