我在使用静态方法初始化新对象时遇到问题。 我有一个类似于数据库的类。
public class LatLogDBAdapter {
private final Context mCtx;
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.w(TAG, DATABASE_CREATE);
db.execSQL(DATABASE_CREATE);
}
}
我在另一个类中有一个静态方法,在静态方法中我喜欢使用此Context初始化DatabaseHelper,但错误是“不能在静态上下文中使用它”。
我在另一个类中的静态方法如下,
public class DetailMapView extends FragmentActivity {
public static void updateLocation(String number, String LatLong){
LatLogDBAdapter dbHelper = new LatLogDBAdapter(this);
}
}
我怎么能没有错误“不能在静态上下文中使用它”。 感谢
答案 0 :(得分:14)
public class DetailMapView extends FragmentActivity {
public static void updateLocation(Context context, String number, String LatLong){
LatLogDBAdapter dbHelper = new LatLogDBAdapter(context);
}
}
将Context
作为参数添加到静态方法中,并在调用方法时将其传入。
答案 1 :(得分:0)
您的函数'updateLocation'是静态的。这意味着没有与之关联的实例,因此没有'this'。
您将需要找到另一种方法来获取数据库帮助程序类的上下文。
编辑:就个人而言,我发现必须将上下文传递给许多不同的函数是一件痛苦的事。在活动中,您只需将活动用作上下文,但在许多情况下(例如,使用数据库),您将需要使用应用程序上下文。为此,我发现这种方法很有用:
Static way to get 'Context' on Android?