我正在尝试将我的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
,这也会导致应用程序崩溃答案 0 :(得分:3)
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。
答案 1 :(得分:1)
尝试事件总线Green Robot或Otto Event Bus两者都是很好的选择。
答案 2 :(得分:0)
您正在尝试将应用内容投射到活动。它崩溃,导致应用程序上下文不是活动。您应该在服务中使用handleIntent或binder来传输数据。 http://developer.android.com/guide/components/bound-services.html#Basics
答案 3 :(得分:-1)
您可以通过将数据保存到应用程序级变量或将其保存在共享首选项中来执行此任务。
在应用程序级别保存数据 制作一个像
这样的静态变量public static DatatypeYouDesire(String/int) cachedData;
现在,当您想要存储数据时,jst使用您要存储的数据初始化此变量 像
YourApplictionClass.cachedData = "your data to be stored";
同样,您可以通过访问YourApplicationClass.cacheData
来使用此数据