Android 如何在静态方法中获取此上下文
在静态方法中使用此方法初始化新对象时遇到问题。 我有一个像follow这样的数据库类Android 如何在静态方法中获取此上下文,android,Android,在静态方法中使用此方法初始化新对象时遇到问题。 我有一个像follow这样的数据库类 public class LatLogDBAdapter { private final Context mCtx; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; private static class DatabaseHelper extends SQLiteOpenHelper { Dat
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);
}
}
我在另一个类中有一个静态方法,在这个静态方法中,我喜欢使用这个上下文初始化DatabaseHelper,但是错误是“不能在静态上下文中使用这个”
我在一个单独的类中的静态方法如下所示
public class DetailMapView extends FragmentActivity {
public static void updateLocation(String number, String LatLong){
LatLogDBAdapter dbHelper = new LatLogDBAdapter(this);
}
}
我该如何做才能避免出现“不能在静态上下文中使用它”的错误。
谢谢您的函数“updateLocation”是静态的。这意味着没有与之关联的实例,因此没有“This” 您需要找到另一种方法来获取数据库助手类的上下文 编辑:就个人而言,我觉得将上下文传递给这么多不同的函数是一件痛苦的事情。在活动中,您将只使用活动作为您的上下文,但在许多情况下(例如,在数据库中),您将希望使用应用程序上下文。为此,我发现这个方法很有用:
将
上下文
作为参数添加到静态方法中,并在调用该方法时将其传入。可以尝试使用getApplicationContext()来代替它。是的,将getApplicationContext与DatabaseHelper一起使用通常是好的,但调用该fn需要他已经访问了上下文。在这种情况下(在他的静态fn中),他没有。^好的。现在就去拿。好奇的是,还有什么其他方法可以获取上下文?@ShobhitPuri我在下面的答案中添加了更多内容,这回答了您的问题。如果是这样,如何从另一个单独类的方法调用updateLocation()。这个类是公共类SMSReceiver扩展了BroadcastReceiver{}。从SMSReceiver类,我可以调用DetailMapView.updateLocation(context,tel,msg);背后的逻辑是什么?我在哪里可以找到信息?这是一个非常普遍的概念。为了使静态方法保持无状态,这意味着任何状态(如上下文、数字等)都必须作为参数传入。这听起来很合乎逻辑。谢谢!:)我想我现在更了解android的工作原理了。。。(即使是完整的面向对象编程概念似乎对我来说也更清楚了)是的,我是Android新手,不清楚什么是上下文。任何关于上下文的好读物。我补充了一些关于如何在应用程序中处理上下文的内容。查看此链接,在Android上维护对上下文的静态引用不是一个好主意,除非你非常小心:这是关于内存泄漏的危险,特别是当你持有活动上下文时。在本例中,我们讨论的是保持(和访问)应用程序上下文-我认为问题是不同的。
public class DetailMapView extends FragmentActivity {
public static void updateLocation(Context context, String number, String LatLong){
LatLogDBAdapter dbHelper = new LatLogDBAdapter(context);
}
}