2013-04-06 64 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

相關問題