2016-10-06 3 views
0

私は新人ミスを犯しました。私はすべてのカーソルを閉じずに私のアプリケーション全体を書いています。これは、アプリケーションが閉じられてから再び開くまで機能します。今クローズカーソルを扱っているAndroid

は、しかし、私は通過してと同じように私のカーソルをクローズしていますので:

public boolean contains (int pk) 
{ 
    Cursor cursor = null; 
    try 
    { 
     cursor = //cursor assigned; 

     if (cursor.moveToFirst()) 
     { 
      do 
      { 
       if (cursor.getInt(/*PK COLUMN*/) == pk) 
        return true; 
      } 
      while (cursor.moveToNext()); 
     } 
    } 
    finally 
    { 
     if(cursor!= null) 
      cursor.close(); 
    } 

    return false; 
} 

これは別の解決策ですが、それは無意味一時変数を宣言し、異なる領域にカーソルをクローズします。

public boolean contains (int pk) 
{ 
    Cursor cursor = //value; 

    if (cursor != null && cursor.moveToFirst()) 
    { 
     do 
     { 
      int val = cursor.getInt(/*PK COLUMN*/); 
      if(pk == val) 
      { 
       cursor.close(); 
       return true; 
      } 
     } 
     while (cursor.moveToNext()); 

     cursor.close(); 
    } 

    return false; 
} 

return-statementの後にtry-finallyを使用してクリーンアップすると何か問題はありますか?

+0

エラーは何ですか? –

+1

いいえ、最初の例は問題ありません。私はそれを行うために推奨される方法を信じています。 – ShadowGod

+0

@ShadowGod、fantastic。 –

答えて

1

最初の解決策では、カーソルを閉じることなくdoの中でtrueを返します。 しかし、最後に閉じておくのは良い方法です。

関連する問題