Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 关闭数据库_Android_Database_Sqlite_Textview - Fatal编程技术网

Android 关闭数据库

Android 关闭数据库,android,database,sqlite,textview,Android,Database,Sqlite,Textview,请帮助我把db.close()放在这个类的什么地方,因为当我把它放在类的末尾onPause方法中,但它生成错误并强制停止应用程序时,问题发生在我单击行时,我希望在单击行时弹出一个共享菜单,第一次单击该行时,它会弹出菜单,但第二次单击该行时,它会强制停止应用程序,当我删除db.close()时,它可以,但我知道db A将关闭,但我不知道应该在哪里关闭? 以下是分类代码: public class sharedlist extends ListActivity { private String[

请帮助我把db.close()放在这个类的什么地方,因为当我把它放在类的末尾onPause方法中,但它生成错误并强制停止应用程序时,问题发生在我单击行时,我希望在单击行时弹出一个共享菜单,第一次单击该行时,它会弹出菜单,但第二次单击该行时,它会强制停止应用程序,当我删除db.close()时,它可以,但我知道db A将关闭,但我不知道应该在哪里关闭? 以下是分类代码:

public class sharedlist extends ListActivity {

 private String[] items;
 private database db;

 private Typeface homa;
 private Typeface nazanin;
 private SharedPreferences sp;
 private Typeface god;


  @Override
   protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
       setContentView(R.layout.sharedlist);


db=new database(this);
db.open();

items=new      String[db.Count("content")];

homa=Typeface.createFromAsset(getAssets(), "Font/homa.ttf");
nazanin=Typeface.createFromAsset(getAssets(), "Font/nazanin.ttf");
god=Typeface.createFromAsset(getAssets(), "Font/Godfather.ttf");
sp=getApplicationContext().getSharedPreferences("setting", 0);

setListAdapter(new AAD());


}



  @Override
protected void   onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, db.Display_Shared(position, 2).toString());
startActivity(Intent.createChooser(sharingIntent,"اشتراک گذاری از طریق"));

  }

class AAD extends ArrayAdapter{

public AAD(){
    super(sharedlist.this , R.layout.row,items);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater in=getLayoutInflater();
    View row=in.inflate(R.layout.row, parent, false);

    TextView username= (TextView) row.findViewById(R.id.row_username);
    TextView maintext= (TextView) row.findViewById(R.id.row_maintext);

    username.setText(db.Display_Shared(position,1).toString());
    maintext.setText(db.Display_Shared(position, 2).toString());

    username.setTypeface(god);

    if(sp.getString("font", "homa").equals("nazanin")){


        maintext.setTypeface(nazanin);


    }else if(sp.getString("font", "homa").equals("homa")){

        maintext.setTypeface(homa);

    }


    if(sp.getString("size", "k").equals("k")){

        maintext.setTextSize(18);

    }else if(sp.getString("size", "k").equals("b")){

        maintext.setTextSize(25);

    }
    return (row);
}
}

  /*@Override
 protected void onPause() {
super.onPause();
db.close();
}*/


  }

应该在onListItemClick()方法中设置db.close()。当您第二次单击该行时,出现了错误,因为您的数据库已关闭。我认为您应该在onListItemClick()中打开数据库,然后关闭数据库。

一般来说,如果您在“活动生命周期”方法中打开一个资源,您应该在另一个生命周期方法中关闭它以实现对称性

例如,如果在onCreate中打开,则在onDestroy中关闭。如果在onStart中打开,请在onStop中关闭


在您的情况下,由于在“活动”运行时在onCreate中打开并使用打开的db,因此可以在onDestroy中关闭,这应该是“活动”完成之前执行的最后一个方法。

我的建议是,在使用它后立即关闭打开的所有内容。我的咒语:
打开,使用,关闭
。例如:打开,更新记录,关闭-打开,进行查询,关闭-打开,删除记录,关闭-打开,在事务中执行批处理,关闭…谢谢兄弟你的解决方案也帮助了我,但我用onDestroy方法关闭了它我用onDestroy方法关闭了它,我想我的问题解决了