5

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

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

           }

    }

我怎样才能避免出现“不能在静态上下文中使用它”的错误。谢谢

4

2 回答 2

16
public class DetailMapView extends FragmentActivity {
        public static void updateLocation(Context context, String number, String LatLong){
             LatLogDBAdapter dbHelper = new LatLogDBAdapter(context);

       }

}

将 aContext作为参数添加到您的静态方法中,并在调用该方法时将其传入。

于 2013-04-06T01:35:42.957 回答
0

您的函数“updateLocation”是静态的。这意味着没有与之关联的实例,因此没有“this”。

您将需要找到另一种方法来获取数据库助手类的上下文。

编辑:就个人而言,我觉得必须将上下文传递给这么多不同的函数是一件很痛苦的事情。在活动中,您将只使用活动作为您的上下文,但在许多情况下(例如这个,使用数据库)您将希望使用应用程序上下文。为此,我发现这种方法很有帮助:
Static way to get 'Context' on Android?

于 2013-04-06T01:30:31.790 回答