Android 如何在静态方法中获取此上下文

Android 如何在静态方法中获取此上下文,android,Android,在静态方法中使用此方法初始化新对象时遇到问题。 我有一个像follow这样的数据库类 public class LatLogDBAdapter { private final Context mCtx; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; private static class DatabaseHelper extends SQLiteOpenHelper { Dat

在静态方法中使用此方法初始化新对象时遇到问题。 我有一个像follow这样的数据库类

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);

       }

}