2013-04-06 59 views
2

我在使用静态方法初始化新对象时遇到问题。 我有一个类似的数据库类。如何在静态方法中获取此上下文

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

      } 

    } 

我怎么能做到这一点不是有“在静态情况下不能使用这种”错误。 谢谢

+0

也许尝试getApplicationContext()而不是这个。 – 2013-04-06 01:30:02

+0

是的,在DatabaseHelper中使用getApplicationContext通常很好,但是调用fn需要他已经访问上下文。在这种情况下(在他的静态fn中)他没有。 – Tom 2013-04-06 01:32:24

+0

^好吧。现在得到它。只是好奇,有什么可以通过其他方式来获得上下文? – 2013-04-06 01:33:39

回答

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

     } 

} 

添加Context作为参数传递给你的静态方法,并通过它,当你调用方法Standard。

+0

如果像这样如何从另一个单独的类的方法调用updateLocation()。该类是公共类SMSReceiver扩展BroadcastReceiver {}。来自SMSReceiver类的 – Bryanyan 2013-04-06 01:46:56

+0

,我可以调用像DetailMapView.updateLocation(context,tel,msg); – Bryanyan 2013-04-06 01:49:33

+0

是的,谢谢 – Bryanyan 2013-04-06 02:22:10

0

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

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

编辑:个人而言,我觉得必须将上下文传递给许多不同的功能是一件痛苦的事情。在活动中,您只需使用活动作为上下文,但在很多情况下(比如这个数据库),您将需要使用应用程序上下文。对于这一点,我觉得这个方法有用:
Static way to get 'Context' on Android?

+0

是的,我是Android的新手,我不清楚上下文是什么。任何良好的上下文阅读。 – Bryanyan 2013-04-06 01:48:49

+0

我添加了一些关于如何在应用中处理上下文的内容。 – Tom 2013-04-06 02:07:07

+0

查看此链接,在Android上维护对上下文的静态引用不是一个好主意,除非您非常小心:http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html – edthethird 2013-04-06 19:48:19

相关问题