-1

Db、Java、および OOP を使用して Android アプリを作成しています。

これは、主なアクティビティのソースです。

public class EpsoftSMSActivity extends Activity {
    /** Called when the activity is first created. */

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

        final MyDatabase db=new MyDatabase(getApplicationContext());

        db.open();  //apriamo il db

        if (db.listaParametri().getCount()==0)
        {
            setup_parametri();

             /*final Dialog dialog = new Dialog(this);
             dialog.setContentView(R.layout.login);
             dialog.setTitle("Login");
             dialog.setCancelable(true);
             //there are a lot of settings, for dialog, check them all out!


             //set up button
             Button registra = (Button) dialog.findViewById(R.id.registra);
             registra.setOnClickListener(new OnClickListener() {
                 @Override
                     public void onClick(View v) {

                         String username = dialog.findViewById(R.id.username).toString();
                         String password = dialog.findViewById(R.id.password).toString();

                         db.inserimentoParametri(username, password);
                         dialog.dismiss();
                     }
             });

             Button annulla = (Button) dialog.findViewById(R.id.annulla);

             annulla.setOnClickListener(new OnClickListener() {
                 @Override
                     public void onClick(View v) {
                        dialog.dismiss();

                     }
             });

             //now that the dialog is set up, it's time to show it    
             dialog.show();*/
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.layout.menu, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch (item.getItemId())
        {
            case R.id.chiudi:

                finish();
                System.exit(0);
                return true;

            case R.id.setup:

                setup_parametri();
                return true;

            case R.id.info:

                  final Dialog dialog = new Dialog(this);
                    dialog.setContentView(R.layout.dialog);
                    dialog.setTitle("Informazioni & Credits");
                    dialog.setCancelable(true);
                    //there are a lot of settings, for dialog, check them all out!

                  /*  //set up text
                    TextView text = (TextView) dialog.findViewById(R.id.TextView01);
                    //text.setText(R.string.lots_of_text);

                    //set up image view
                    ImageView img = (ImageView) dialog.findViewById(R.id.ImageView01);
                    img.setImageResource(R.drawable.ic_launcher);*/

                    //set up button
                    //set up button
                    Button button = (Button) dialog.findViewById(R.id.Button01);
                    button.setOnClickListener(new OnClickListener() {
                    @Override
                        public void onClick(View v) {
                            dialog.dismiss();

                        }
                    });
                    //now that the dialog is set up, it's time to show it    
                    dialog.show();

            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void setup_parametri()
    {
         final Dialog dialog = new Dialog(this);
         dialog.setContentView(R.layout.login);
         dialog.setTitle("Login");
         dialog.setCancelable(true);
         //there are a lot of settings, for dialog, check them all out!


         //set up button
         Button registra = (Button) dialog.findViewById(R.id.registra);
         registra.setOnClickListener(new OnClickListener() {
             @Override
                 public void onClick(View v) {

                     String username = dialog.findViewById(R.id.username).toString();
                     String password = dialog.findViewById(R.id.password).toString();

                      db.inserimentoParametri(username, password);
                     dialog.dismiss();
                 }
         });

         Button annulla = (Button) dialog.findViewById(R.id.annulla);

         annulla.setOnClickListener(new OnClickListener() {
             @Override
                 public void onClick(View v) {
                    dialog.dismiss();
                 }
         });

         //now that the dialog is set up, it's time to show it    
         dialog.show();
    }
}

「setup_parametri」と呼ばれる最新の関数で、「db.inserimentoParametri」を呼び出そうとしましたが、Eclipse から次のように言われました。

「データベースを解決できません」

Db は oncreate で定義されます。

調子はどう?

4

3 に答える 3

2

db内で宣言されたローカル変数ですonCreate()。他のメソッドからは見えません。おそらく、これを Activity クラスのインスタンス フィールドにしたいでしょう。つまり、クラスのすべてのメソッドで使用できるようになります。

の外側でフィールドを宣言しますonCreate()が、内側で初期化します。このような:

private MyDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {

    ....

    db = new MyDatabase(getApplicationContext());
于 2012-06-08T23:22:52.660 に答える
2

db をonCreate()に渡さずに変数として宣言しましたsetup_parametri()

クラス変数にする必要があります。

public class EpsoftSMSActivity extends Activity {
    /** Called when the activity is first created. */


    final MyDatabase db;

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

        db = new MyDatabase(getApplicationContext());



        db.open();  //apriamo il db

または署名をsetup_parametri()に変更しますsetup_parametri(MyDatabase db)

于 2012-06-08T23:28:19.363 に答える
0

OnClickerListener イベント ハンドラーが実行されるとき、DB 変数はスコープ内にありません。

db 定義を onCreate メソッドのスコープ外に移動します。つまり、メンバー変数にします。

于 2012-06-08T23:25:01.737 に答える