2013-07-07 30 views
3

我正在研究一個稱爲驅動模式的應用程序,該應用程序允許用戶在設置中輸入自定義消息,並讓此消息自動回覆任何傳入文本。 (當然還有其他功能)我的問題是試圖引用靜態字符串,並使用getApplicationContext();在getApplicationContext()中使用Android中的靜態方法?

我從EditTextPreference中抓取文本,並試圖在多個活動中訪問此字符串。

修復:現在這個問題已經修復,我已經編輯了整篇文章,以更好地幫助其他可能有這個問題的人。感謝您的幫助。

public class Main extends Activity implements OnSharedPreferenceChangeListener { 

    ... 

    public static String reply = ""; 

    ... 

    public void loadPreferences() { 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     settings.registerOnSharedPreferenceChangeListener(Main.this); 

     if (settings.getBoolean("cbReply", true)) { 
      reply = settings.getString("tbMessage", "@string/pd_message"); 
      ... 
     } else { 
      ... 
     } 
+1

請附上logcat的 –

+0

而只有相關的代碼(即失敗的方法)使這些方法是靜態的。 – alfasin

+1

@RSenApps令人討厭的是,幾乎每個帖子都以「post logcat」開頭,即使問題是關於編譯器錯誤。 – Simon

回答

4

您可以通過添加一個Context參數

public static void reply(Context context) { 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 
    final String message = settings.getString("message", "@string/pd_message"); 

    send(context, Receiver.number, message); 
} 

public void send(Context context, String number, String message) { 
    PendingIntent pi = PendingIntent.getActivity(context, 0, new Intent(context, Main.class), 0); 
    SmsManager sm = SmsManager.getDefault(); 
    if (Receiver.number != "") { 
     sm.sendTextMessage(number, null, message, pi, null); 
    } 
} 
+0

'reply'內的'send'調用需要傳遞'context'參數。 –

+0

@TedHopp謝謝。 –

+0

這個答案對我來說非常合適。在OP中,我發現了一個簡單的方法,但我非常感謝幫助。我本來早就接受了答案,但幾個星期沒有電腦。謝謝! – sociallymellow

相關問題