Вызов метода подкласса из другого класса - Android (java)

У меня есть рабочая игра-викторина, и сейчас я пытаюсь реализовать рекорды. Я создал класс подкласса DatabaseHelper, расширяющий класс SQLiteOpenHelper. Я пытаюсь вызвать метод в подклассе DatabaseHelper из другого класса и получаю ошибки. Классы не будут компилироваться, поэтому вывод LogCat невозможен. Я прокомментировал в коде ошибки.

Советы по структуре кода также приветствуются!

Рекорды.java

public class Highscores extends Activity {

    DatabaseHelper dh;
    SQLiteDatabase db;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        dh = new DatabaseHelper(context);
    }

    public class DatabaseHelper extends SQLiteOpenHelper { 

        public DatabaseHelper(Context context) { 
            //code
        }

        public boolean check(long score, int percentage) {
            //code
        }
    }
}

Результаты.java

public class Results extends Activity {

    DatabaseHelper dh;  //Error:  "DatabaseHelper cannot be resolved to a type."

    public void onCreate(Bundle savedInstanceState) {

        dh = new DatabaseHelper();  //Error:  "DatabaseHelper cannot be resolved to a type."
    }

    public void showResults() {

        if(dh.check(score, percentage) == true) {  //Error:  "DatabaseHelper cannot be resolved to a type."
      dh.insert(score, percentage);  //Error:  "DatabaseHelper cannot be resolved to a type."
        }
    }
}

person Matt    schedule 02.01.2013    source источник


Ответы (3)


Похоже, вам не хватает импорта в верхней части вашего Results.java

Это должно выглядеть примерно так: import com.somepackage.DatabaseHelper;

Подобные ошибки обычно связаны либо с опечаткой в ​​имени класса, либо с отсутствием импорта.

person Mike dg    schedule 02.01.2013
comment
Кажется, это решило проблему. Это правильный подход? Кажется странным просто импортировать подкласс из другого класса. - person Matt; 02.01.2013
comment
Это совершенно нормально. Некоторые IDE также автоматически импортируют их для вас. В общем, есть сочетания клавиш. Например, в Eclipse на OSx я нажимаю command+shift+o, и он исправляет все эти ошибки. - person Mike dg; 02.01.2013

Когда вам нужен класс за пределами класса, в котором он определен, я бы предложил создать этот класс как отдельный класс. В противном случае вам нужно создать экземпляр внешнего класса для доступа к внутреннему классу, который будет создавать экземпляр Activity и вызывать DatabaseHelper для экземпляра Activity, что не является хорошим подходом в Android.

Если вы все еще хотите продолжить существующий подход, вот как вам нужно получить к нему доступ:

OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

Прочтите руководство по вложенным классам

person kosa    schedule 02.01.2013

Не используйте вложенные классы, пока вы действительно не уверены, что они вам нужны. Переместите DatabaseHelper в отдельный файл класса и импортируйте его, когда вам нужно.

person Leonidos    schedule 02.01.2013