2014-02-15 37 views
1

我在StackOverflow中遇到過這個問題,但我無法使用建議的解決方案。最常見的解決方案之一是擴展Application類,但是我不能這樣做,因爲我所在的類已經擴展了另一個類。有沒有其他的方式來獲得課程的背景?如何獲取Android中的類(非活動)的上下文?

public class SMSReceiver extends BroadcastReceiver { 
     ....... 
     ....... 
     CreateDB dc = new CreateDB(mcontext); 
     dc.addBook(new Book(senderPhoneNumber,ang)); 

} 

基本上,我需要收到一條消息,並添加發件人號碼和信息的數據庫,我需要上下文來創建數據庫實例。我是Android的初學者,所以如果你可以保持簡單的語言,那將會很棒。

回答

2

當你伸出廣播接收器,你必須添加此方法

public void onReceive(Context context, Intent intent){ 

} 

,你可以看到有在參數上下文

+0

謝謝!我沒有意識到我可以使用相同的上下文,並試圖創建一個構造函數,導致我的應用程序一直崩潰。 –

+2

@Harichandan所以接受我的回答 –

+0

我是一個StackOverflow新手,我很明顯不允許在接受答案後不久,我會肯定這樣做,當它允許我.. –

1

你可以得到ContextonReceive()方法如下...

public class SMSReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    CreateDB dc = new CreateDB(context); 
    dc.addBook(new Book(senderPhoneNumber,ang)); 
    } 
} 
0

Activity在您的application您可以訪問Contex噸的activity。在你的類使用例如 靜態參考在你活動類創建一個靜態參考

public class MyActivity extends Activity { 
public static Context mContext; 

public static Context getContext() { 
    return mContext; 
} 

public static void setContext(Context mContext) { 
    this.mContext = mContext; 
} 
} 

,只是通過它在你的SMSReceiver類這樣

public class SMSReceiver extends BroadcastReceiver { 
     ....... 
     ....... 
     CreateDB dc = new CreateDB(MyActivity.getContext()); 
     dc.addBook(new Book(senderPhoneNumber,ang)); 

} 
+0

我試過..顯然你不能有一個靜態的上下文..使用上面的方法給出了一個錯誤:「無法從類型ContextWrapper的非靜態方法getApplicationContext()的靜態引用」 –

+0

是的,你是正確的,那麼你可以使用get和set方法看到我編輯的答案。 –

+0

我能夠從你建議的setContext()中刪除靜態後運行程序,但它給了一個運行時異常.. –

相關問題