Использование правильного контекста внутри метода для получения базы данных sqlite - PullRequest
0 голосов
/ 13 декабря 2010

Я в основном пытаюсь получить информацию из базы данных sqlite в другом классе.Я сделал это без проблем внутри метода onCreate, но когда я пытаюсь использовать его внутри onClickListener, который находится внутри этого onCreate, я не могу найти подходящий контекст для использования.Мой код выглядит следующим образом:

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);

и каждый раз, когда я пытаюсь это сделать, программа запускается, но когда она получает в другом случае, она выдает ошибку и завершает работу.Может кто-нибудь сказать мне, какой контекст я должен использовать, чтобы заставить его работать?

1 Ответ

1 голос
/ 13 декабря 2010

Поскольку вам может понадобиться соединение с базой данных более одного раза, я рекомендую открывать и закрывать соединение с базой данных в вашем собственном классе приложения, который расширяет Application.

Там у вас есть методы onCreate и onDestroy, в которых вы можете открывать и закрывать базу данных (потому что она имеет контекст). Если вы сделаете объект базы данных переменной класса (public static), вы сможете использовать его как MyApplication.mDatabase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...