0

私は基本的に別のクラスのsqliteデータベースから情報を取得しようとしています。onCreateメソッド内で問題なくこれを実行しましたが、そのonCreate内にあるonClickListener内で使用しようとすると、使用する適切なコンテキストが見つかりません。私のコードは次のとおりです。

private AutoCompleteTextView search;
private Button showInfoButton;
private TextView courseInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_courses);
    final Context baseContext = getBaseContext();
    courseInfo = (TextView) this.findViewById(R.id.text);
    DataBase db = new DataBase(this.getApplicationContext());
    db.openDataBase();
    final ArrayList<String> aCourses = db.getCoursesArr();
    db.close();

    search = (AutoCompleteTextView) findViewById(R.id.autocomplete_course);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_courses, aCourses);
    search.setAdapter(adapter);

    showInfoButton = (Button) this.findViewById(R.id.show_info_button);
    showInfoButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            if (aCourses.toString().contains(search.getText()) == false ) {
                courseInfo.setText("Please select a course from the drop-down menu and click on the \"Show course information\" button");
            }
            else{
                String selectedCourse = search.toString();
                DataBase db1 = new DataBase(baseContext);
                db1.openDataBase();
                ArrayList<String> courseAttributes = db1.getCourseAttributes();
                ArrayList<String> attributeValues = db1.getAttributeValues(selectedCourse);
                db1.close();
                String courseInformation = "";
                for (int i=0; i < courseAttributes.size(); i++){
                    courseInformation = courseInformation + courseAttributes.get(i) + ": " + attributeValues.get(i) + System.getProperty("line.separator");
                }
                courseInfo.setText(courseInformation);
            }
        }
    });
}

問題は

DataBase db1 = new DataBase(baseContext);

に変更してみました

DataBase db = new DataBase(this.getApplicationContext());

DataBase db = new DataBase(null);

そして、私が試してみるたびに、プログラムは実行されますが、それ以外の場合は、エラーがスローされてシャットダウンします。誰かがそれを実行するためにどのコンテキストを使用すべきか教えてもらえますか?

4

1 に答える 1

1

データベース接続が複数回必要になる可能性があるため、を拡張する独自のアプリケーションクラスでデータベース接続を開いたり閉じたりすることをお勧めしますApplication

ここには、データベースを開いたり閉じたりできるonCreateメソッドとonDestroyメソッドがあります(データベースにはコンテキストがあるため)。データベースオブジェクトをクラス変数(public static)として作成すると、これをのように使用できるはずですMyApplication.mDatabase

于 2010-12-13T00:20:57.343 に答える