Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从其他类调用子类方法-Android(java)_Java_Android_Database_Subclass_Sqliteopenhelper - Fatal编程技术网

从其他类调用子类方法-Android(java)

从其他类调用子类方法-Android(java),java,android,database,subclass,sqliteopenhelper,Java,Android,Database,Subclass,Sqliteopenhelper,我有一个工作琐事游戏,现在正试图实现一个高分。我创建了一个子类DatabaseHelper类,扩展了SQLiteOpenHelper。我试图从另一个类调用子类DatabaseHelper中的方法,但遇到了错误。这些类不会编译,因此没有LogCat输出。我已经在代码中注释了错误 代码结构建议也很感谢 Highscores.java public class Highscores extends Activity { DatabaseHelper dh; SQLiteDatabas

我有一个工作琐事游戏,现在正试图实现一个高分。我创建了一个子类DatabaseHelper类,扩展了SQLiteOpenHelper。我试图从另一个类调用子类DatabaseHelper中的方法,但遇到了错误。这些类不会编译,因此没有LogCat输出。我已经在代码中注释了错误

代码结构建议也很感谢

Highscores.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
        }
    }
}
Results.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."
        }
    }
}

听起来您缺少Results.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."
        }
    }
}
它应该看起来像import com.somepackage.DatabaseHelper


像这样的错误通常是类名输入错误或缺少导入。

当您需要定义的类之外的类时,我建议将该类创建为单独的类。否则,您需要创建外部类的实例来访问内部类,该类将创建活动实例,并在活动实例上调用DatabaseHelper,这在Android中不是一个好方法

如果您仍希望继续使用现有方法,请按以下方式访问:

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

请阅读

不要使用嵌套类,除非您确实确定需要它们。
将DatabaseHelper移动到单独的类文件,并在需要时导入它

这似乎解决了问题。这是正确的方法吗?从另一个类导入一个子类似乎很奇怪。这是完全正常的。一些IDE也会自动为您导入它们。通常也有键盘快捷键。例如,在OSx上的Eclipse中,我点击command+shift+o,它修复了所有这些错误。