2011-03-10 127 views
0

我遵循教程将数据从sqlite数据库填充到Android中的微调器(下拉菜单)中。不过,我得到的错误:Android微调 - 无法对静态方法进行静态引用帮助

Cannot make a static reference to the non-static method fetchAllCategories() from the type DatabaseAdapter 

我的代码如下:

在EditTask:

private void fillData() { 
     Cursor categoriesCursor; 
     Spinner categoriesSpinner = (Spinner) findViewById(R.id.spinDept); 
     categoriesCursor = DatabaseAdapter.fetchAllCategories(); 

     startManagingCursor(categoriesCursor); 

     String[] from = new String[] { DatabaseAdapter.CAT_NAME }; 

     int[] to = new int[] { R.id.tvDBViewRow }; //this part hasnt been implemented in to the layout yet 

     SimpleCursorAdapter categoriesAdapter = new SimpleCursorAdapter(this, 
       R.layout.db_view_row, categoriesCursor, from, to); 

     categoriesSpinner.setAdapter(categoriesAdapter); 
    } 

在我DatabaseAdapter类我有以下几点:

public Cursor fetchAllCategories() { 
    if (mDb == null) { 
     this.open(); 
    } 
    String tableName = "CAT_TABLE"; 
    return mDb.query(tableName, new String[] { CAT_ID, CAT_NAME }, null, 
      null, null, null, null); 
} 

违规代码行是:

categoriesCursor = DatabaseAdapter.fetchAllCategories(); 

我很新Java/Android,所以它可能是简单/明显的东西,但任何帮助,非常感谢!

回答

1

您必须首先实例化一个DatabaseAdapter对象。 如:

DatabaseAdapter myDbAdapter = new DatabaseAdapter(); 
categoriesCursor = myDbAdapter.fetchAllCategories(); 
+0

感谢您的帮助,代码的第二部分带来了更多的错误,例如:“不能在静态上下文中使用它”和“无法对非静态字段mDb进行静态引用”。使用第一部分还会产生以下错误:对于类型DatabaseAdapter,未定义fetchAllCategories()方法 – user319940 2011-03-10 21:42:32

+0

必须用您在自己的实现中使用的类名替换DatabaseAdapter。 – 2011-03-10 21:46:41

+0

classname是DatabaseAdapter,它表示构造函数需要另一个参数,所以我刚刚使用了DatabaseAdapter myDbAdapter = new DatabaseAdapter(null);这似乎已经解决了这个问题,但我仍然得到类别游标的错误是:类别游标无法解析 – user319940 2011-03-10 21:50:16

0

才能够使你的代码工作,你需要声明的方法fetchAllCategoires()静态如下:

public static Cursor fetchAllCategories() 

因为你还没有实例化一个DatabaseAdapter对象,除非静态关键字出现在方法声明中,否则不能通过类名引用调用其中一个方法。

+0

我以前尝试过,但不幸的是它带来了进一步的错误,如:“不能在静态上下文中使用”和“静态引用非静态字段mDb“ – user319940 2011-03-10 21:40:11

+0

ahh,关于mDb错误,这可能是因为mDb是一个全局变量,没有声明为静态。您应该尽可能尝试实例化您的类并在实例上调用fetchAllCategories()方法。 – 2011-03-10 21:44:03

相关问题