当我声明此方法时,它会写入错误:无法在静态上下文中使用它。错误发生在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)
{
//
}
}
);
}
答案 0 :(得分:0)
静态方法属于不属于该类对象的类,并且没有与之关联的实例。 this
关键字始终引用类(对象)的实例,因此只有在可用时才能使用它,例如在实例方法中。
您不能在静态方法中使用this
,因此您需要将其更改为实例成员(即定义不带static
的方法)或不要使用{{ 1}}如果方法需要是静态的。
答案 1 :(得分:0)
如果您有理由将此 作为静态方法,您可以将Context作为参数传递
protected static void myMethod(Context myContext)
然后您将使用this
myContext
答案 2 :(得分:-1)
您的方法不应该是静态的:
protected void myMethod()
如果要在不实例化特定类的情况下调用它们,则使用静态方法。
但是,如果一个类扩展Activity
并且它尚未实例化,则它将没有设置上下文。
由于您正在创建一个微调器适配器和其他依赖于上下文的工作,因此您的方法不应该是静态的。