Java SQLite:尝试重新打开已关闭的对象
我有一个导航抽屉,当我选择第二个项目时,有时我会看到一些关于尝试重新打开已关闭对象的错误:Java SQLite:尝试重新打开已关闭的对象,java,android,sqlite,Java,Android,Sqlite,我有一个导航抽屉,当我选择第二个项目时,有时我会看到一些关于尝试重新打开已关闭对象的错误:SQLiteDatabase 我不知道如何解决这个问题 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final String[] fragments ={"حذف تمامی پیام ها",
SQLiteDatabase
我不知道如何解决这个问题
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String[] fragments ={"حذف تمامی پیام ها","ذخیره تمامی پیام ها"};
mDrawerLayout = (DrawerLayout) findViewById(R.id.main_drawer_layout);
mDrawerList = (ListView) findViewById(R.id.main_drawer);
mDrawerList.setAdapter(new ArrayAdapter<String>(getActionBar().getThemedContext(),android.R.layout.simple_expandable_list_item_1, fragments));
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position)
{
case 0:
{
final SQLiteDatabase mydatabase = openOrCreateDatabase("CopyCollection", MODE_PRIVATE, null);
mydatabase.execSQL("DELETE FROM Details;");
mydatabase.close();
myBrowser.loadUrl("javascript:fill_comment()");
break;
}
case 1:
{
final SQLiteDatabase mydatabase1 = openOrCreateDatabase("CopyCollection", MODE_PRIVATE, null);
Cursor crs = mydatabase1.rawQuery("SELECT * FROM Groups;",null);
String[] array = new String[crs.getCount()];
arrayID = new String[crs.getCount()];
Count = crs.getCount();
int i = 0;
while(crs.moveToNext()){
String uname = crs.getString(crs.getColumnIndex("GroupName"));
String num = crs.getString(crs.getColumnIndex("ID"));
arrayID[i] = num;
array[i] = uname;
i++;
}
final AlertDialog.Builder builder = new AlertDialog.Builder(AndroidHTMLActivity.this);
builder.setTitle("گروه خود را انتخاب کنید");
builder.setItems(array, new DialogInterface.OnClickListener()
{
public void onClick(final DialogInterface dialog, final int which)
{
if(which == 0)
{
if(Count == 4)
{
Toast.makeText(getApplicationContext(),"نسخه رایگان",Toast.LENGTH_SHORT).show();
}
else if (Count < 4)
{
myBrowser.loadUrl("javascript:getCheckedBox()");
AlertDialog.Builder alert = new AlertDialog.Builder(AndroidHTMLActivity.this);
alert.setTitle("گروه جدید");
alert.setMessage("نام جدید را وارد کنید");
final EditText input = new EditText(AndroidHTMLActivity.this);
input.setInputType(1);
alert.setView(input);
alert.setPositiveButton("تایید", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
m_Text = input.getText().toString();
mydatabase1.execSQL("INSERT INTO Groups (GroupName) VALUES('" + m_Text + "');");
Cursor c3 = mydatabase1.rawQuery("SELECT * FROM Groups ORDER BY ID DESC LIMIT 1;", null);
while(c3.moveToNext()){
int ID = c3.getInt(0);
LastDir = String.valueOf(ID);
}
for(int i=0; i<ArraySize; i++)
{
Cursor CDetails = mydatabase1.rawQuery("SELECT * FROM Details WHERE ID = "+CheckBoxes[i]+" ;", null);
if (CDetails.moveToFirst()) {
appName = CDetails.getString(1);
txtClip = CDetails.getString(2);
text_Date = CDetails.getString(3);
}
CDetails.close();
if(i < 4)
{
mydatabase1.execSQL("INSERT INTO MainContent(AppName,Txt,GroupID,Time)VALUES('" + appName + "','" + txtClip + "','" + LastDir + "','" + text_Date + "');");
mydatabase1.execSQL("DELETE FROM Details WHERE ID = " + CheckBoxes[i] + ";");
mydatabase1.close();
}
else
{
Toast.makeText(getApplicationContext(),"نسخه رایگان",Toast.LENGTH_SHORT).show();
break;
}
}
}
});
alert.setNegativeButton("انصراف", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
myBrowser.post(new Runnable()
{
public void run()
{
myBrowser.loadUrl("javascript:fill_comment()");
}
});
}
});
alert.show();
}
}
else if(which > 0)
{
}
}
});
builder.show();
mydatabase1.close();
}
}
}
});
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
最终字符串[]片段={“;
mDrawerLayout=(抽屉布局)findViewById(R.id.main\u抽屉布局);
mDrawerList=(ListView)findViewById(R.id.main\u抽屉);
mDrawerList.setAdapter(新的ArrayAdapter(getActionBar().getThemedContext(),android.R.layout.simple\u expandable\u list\u item\u 1,fragments));
mDrawerList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
开关(位置)
{
案例0:
{
最终SQLiteDatabase mydatabase=openOrCreateDatabase(“CopyCollection”,MODE_PRIVATE,null);
execSQL(“从详细信息中删除;”;
mydatabase.close();
loadUrl(“javascript:fill_comment()”);
打破
}
案例1:
{
最终SQLiteDatabase mydatabase1=openOrCreateDatabase(“CopyCollection”,MODE_PRIVATE,null);
游标crs=mydatabase1.rawQuery(“从组中选择*”,null);
String[]数组=新字符串[crs.getCount()];
arrayID=新字符串[crs.getCount()];
Count=crs.getCount();
int i=0;
while(crs.moveToNext()){
字符串uname=crs.getString(crs.getColumnIndex(“GroupName”);
String num=crs.getString(crs.getColumnIndex(“ID”);
arrayID[i]=num;
数组[i]=uname;
i++;
}
final AlertDialog.Builder=new AlertDialog.Builder(AndroidHTMLActivity.this);
建筑商名称(“建筑商名称”);
setItems(数组,新的DialogInterface.OnClickListener()
{
public void onClick(final DialogInterface dialog,final int which)
{
if(which==0)
{
如果(计数=4)
{
Toast.makeText(getApplicationContext(),“Toast.LENGTH”;“show()”;
}
否则如果(计数<4)
{
loadUrl(“javascript:getCheckedBox()”);
AlertDialog.Builder alert=新建AlertDialog.Builder(AndroidHTMLActivity.this);
警惕。设置标题(“گوهجدید”);
警报。设置消息(“警报”);
最终编辑文本输入=新编辑文本(AndroidHTMLActivity.this);
输入。设置输入类型(1);
alert.setView(输入);
alert.setPositiveButton(“تیید”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
m_Text=input.getText().toString();
mydatabase1.execSQL(“插入到组(GroupName)值(““+m_Text+”);”);
游标c3=mydatabase1.rawQuery(“按ID描述从组顺序中选择*限制1;”,null);
while(c3.moveToNext()){
int ID=c3.getInt(0);
LastDir=String.valueOf(ID);
}
对于(int i=0;i 0)
{
}
}
});
builder.show();
mydatabase1.close();
}
}
}
});
}
在您的案例1:
final SQLiteDatabase mydatabase1 = openOrCreateDatabase("CopyCollection", MODE_PRIVATE, null);
在案例1
代码块的末尾关闭。因此,当单击对话框按钮时-
mydatabase1.execSQL("INSERT INTO Groups (GroupName) VALUES('" + m_Text + "');");
这里您得到了异常。mydatabase1
已经关闭。您现在应该在此onClick()
中获得一个新的ref。您可以写一个吗?这里的信息有点太多。限制问题:SQLiteDatabase
。使用调试器检查它的打开(和关闭)位置,然后查看是否存在打开的db连接。如果是,您可能需要重新排序代码。