2011-09-02 33 views
0

我知道有这个类似的论坛主题,但我已经阅读并尝试了解决问题的方法,但似乎没有这样做。 我得到的:Android SQLite关闭数据库之间的2个活动

close()方法是从来没有明确地呼吁数据库/数据/数据...

应用程序没有关闭已打开的数据库或光标...

我的错误不会直接发生,它会在一段时间后发生,当我在两次活动之间来回移动时。

我使用两个需要连接到数据库的活动。我的想法是在其他活动开始之前关闭数据库的第一项活动。这是我的代码:

@Override 
public void onCreate(Bundle savedInstance) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    movies = new MoviesData(this); 
    cursor = getTitles(); 
    showTitles(cursor); 
} 

@Override 
public void onPause() { 
    movies.close(); 
    super.onPause(); 
} 

@Override 
public void onResume() { 
    movies = new MoviesData(this); 
    super.onResume(); 
} 

这是我的第一个活动,第二个活动非常相似,并开始按钮按下。 MoviesData类只是下面找到的一个空的SQLiteOpenHelper类。

public class MoviesData extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "movies.db"; 
    private static final int DATABASE_VERSION = 1; 

    public MoviesData(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
} 

我现在知道何时显示错误。如果我退出应用程序,然后再次打开它并尝试执行错误显示的内容。我试图在“onDestroy()”中关闭数据库,但这并没有帮助...

回答

0

我现在就开始工作了! 我只是把它添加到我的SQLiteOpenHelper类。

public class MoviesData extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "movies.db"; 
    private static final int DATABASE_VERSION = 1; 

    private static MoviesData movies; 

    private MoviesData(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public static MoviesData getInstance(Context context) { 
     if (movies == null) { 
      movies = new MoviesData(context); 
     } 
     return movies; 
    } 

}

0
// 
@Override 
public void onPause() { 
    super.onPause(); 
    movies.close(); 
cursor.close(); 

} 
// no need to write this code 
@Override 
public void onResume() { 
    movies = new MoviesData(this); 
    super.onResume(); 
} 
+0

如果我没有的onResume(),当我把从第二活动返回,返回到第一个,我没有什么显示了。我需要使用cursor = getTitles() –

+0

来获取信息,那么你应该使用静态数据 – sravan