在setOnCLickListener中处理数据库(...方法

时间:2013-04-15 16:16:13

标签: android database eclipse

在我的项目中,我想为我的数据库添加一个重置按钮(我需要更新一个条目,4个不同的信息,以便在测验中跟踪用户的进展)

问题是我需要在这个Listener中启动方法initDB():

public class MainActivity extends Activity implements View.OnClickListener {
private Button reset = null;


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button reset = (Button)findViewById(R.id.raz);

        DBGestion dbGestion = new DBGestion(this);
.
.
.
        reset.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v){

            dbGestion.open();
            dbGestion.initDB("Alex"); 
            dbGestion.close();
        }

    }); 

它表示我不能在不同方法中定义的类中引用非final变量(dbGestion)。但它不能用dbGestion作为最终变量..

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下几种方法:

  1. MainActivity中的字段变量
  2. onCreate()
  3. 中的最终变量
  4. 匿名OnClickListener中的字段变量
  5. onClick()
  6. 中的局部变量

    例如:

    public class MainActivity extends Activity {
        // (1) DBGestion dbGestion;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            ...
            // (1a) dbGestion = new DBGestion(this); // Instantiate field variable
            // (2) final DBGestion dbGestion = new DBGestion(this);
            reset.setOnClickListener(new OnClickListener() {
                // (3) DBGestion dbGestion = new DBGestion(MainActivity.this);
                @Override
                public void onClick(View v){
                    // (4) DBGestion dbGestion = new DBGestion(MainActivity.this); or new DBGestion(v.getContext());
                    dbGestion.open();
                    dbGestion.initDB("Alex"); 
                    dbGestion.close();
                }
            }); 
    

    (有更多的选择,但他们开始变得古怪。)这些方法都不是天生正确或错误,它们都有自己的优点和缺点。选择取决于您是否在其他地方使用dbGestion以及您的个人偏好。