[英]Android: Passing a variable to a non-activity class
我試圖將我的MainActivity中的String傳遞給非活動類(A Notification Service)以便我可以自定義通知消息。 我嘗試過使用Intent,但它不起作用,因為它是一個非基於活動的類。 這樣做的最佳原因是什么?
我目前正在嘗試使用全局變量,但它不起作用。
MainActivity.java
private String var;
private String a = "Pumpkin";
public String getVar(){
return var;
}
public void setVar(String a){
var = a;
}
NotificationService.java
MainActivity b = ((MainActivity)getApplicationContext());
String var = b.getVar();
即使我在NotificationService.java中調用變量var,這也會使應用程序崩潰
1.您可以嘗試制作靜態變量,並在任何地方使用Class refenrence進行調用。
public static String a = "Pumpkin";//Declare in MainActivity
Use it: String var = MainActivity.a;
2.將Intent作為額外內容傳遞,然后在意圖收到的地方獲得額外內容。
startActivity(new Intent(MainActivity.this, PropertyListviewActivity.class).putExtra("Key", "Value"));
Recive:
if (intent != null)
if (intent.getExtras() != null)
if (intent.getExtras().getString("Key") != null) {
String recivedString= intent.getExtras().getString("Key");
3.保持共享首選項並在任何你想要的地方(不是好的練習)。
4.如果不是Android組件類,請嘗試傳遞Contractor。
您正在嘗試將應用上下文轉換為活動。 它崩潰,導致應用程序上下文不是活動。 您應該在服務中使用handleIntent或binder來傳輸數據。 http://developer.android.com/guide/components/bound-services.html#Basics
您可以通過將數據保存到應用程序級變量或將其保存在共享首選項中來執行此任務。
要在應用程序級別保存數據,請創建一個靜態變量
public static DatatypeYouDesire(String/int) cachedData;
現在,當您想要存儲數據時,jst使用您想要存儲的數據初始化此變量
YourApplictionClass.cachedData = "your data to be stored";
類似地,您可以通過訪問YourApplicationClass.cacheData來使用此數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.