不能在静态上下文中使用它

时间:2014-10-12 14:13:15

标签: android static spinner this

当我声明此方法时,它会写入错误:无法在静态上下文中使用它。错误发生在ArrayAdapter适配器部分= ...您是否知道我可以更改它?我完全不知道。

 protected static void myMethod()
  {
    arrTblNames = new ArrayList<String>();
    Cursor c =
        db.rawQuery
        (
            "SELECT name FROM sqlite_master WHERE type = 'table' AND  name! = 'android_metadata'", null
        );

    if (c.moveToFirst())
    {
        while (!c.isAfterLast())
        {
            arrTblNames.add(c.getString(c.getColumnIndex("name")));
            c.moveToNext();
        }
    }

    ArrayAdapter<String> adapter =
        new ArrayAdapter<String>
        (

                //HERE IS THE ERROR
                this, android.R.layout.simple_spinner_item, arrTblNames

        );
    adapter.setDropDownViewResource
    (
        android.R.layout.simple_spinner_dropdown_item
    );
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener
    (
        new AdapterView.OnItemSelectedListener()
        {
            @Override
            public void onItemSelected
            (
                AdapterView<?> parent, View view, int pos, long id
            )
            {
                selectedtable = spinner.getSelectedItem().toString();
            }
            @Override
            public void onNothingSelected(AdapterView<?> arg0)
            {
                //
            }
        }
    );
}

3 个答案:

答案 0 :(得分:0)

静态方法属于不属于该类对象的类,并且没有与之关联的实例。 this关键字始终引用类(对象)的实例,因此只有在可用时才能使用它,例如在实例方法中。

您不能在静态方法中使用this,因此您需要将其更改为实例成员(即定义不带static的方法)或不要使用{{ 1}}如果方法需要是静态的。

答案 1 :(得分:0)

如果您有理由将此 作为静态方法,您可以将Context作为参数传递

protected static void myMethod(Context myContext)

然后您将使用this

而不是myContext

答案 2 :(得分:-1)

您的方法不应该是静态的:

protected void myMethod()

如果要在不实例化特定类的情况下调用它们,则使用静态方法。 但是,如果一个类扩展Activity并且它尚未实例化,则它将没有设置上下文。

由于您正在创建一个微调器适配器和其他依赖于上下文的工作,因此您的方法不应该是静态的。