关闭数据库

时间:2016-02-08 17:59:57

标签: android database sqlite textview

请帮助我在哪里将db.close()放在这个类中,因为当我把它放在onPause方法内的类的末尾,但它生成错误并且强制停止应用程序时,当我点击时会出现问题我要点击该行时,我想要一个共享菜单弹出窗口,第一次单击它弹出菜单的行但是我第二次点击它强制停止应用程序的行,当我删除db.close ()这是好的,但我知道数据库应该关闭,但我不知道我应该在哪里关闭? 这是类代码:

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();
}*/


  }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

一般来说,如果在活动生命周期方法中打开资源,则应在另一个生命周期方法中将其关闭以实现对称。

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

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