2016-10-06 105 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; 
} 

有什麼毛病使用try-最後一個return語句後清理?

+0

什麼是錯誤? –

+1

不是。第一個例子很好,我相信推薦的方法。 – ShadowGod

+0

@ShadowGod,太棒了。 –

回答

1

在您的第一個解決方案中,您在內部返回true而不關閉遊標。 但最後關閉是個好習慣。