我是android开发的新手。我正在开发一个简单的应用程序,其中包含1个活动,1个广播接收器和1个通知服务。有些警报设置在活动中,我想在设备启动/重启时重新设置它们。
下面是我在MainActivity中的代码:
//randomDates is an (Long) array of time in milliseconds
int len = randomDates.length;
AlarmManager[] alarmManager = new AlarmManager[len];
ArrayList<PendingIntent> intentArray = new ArrayList();
String type = "A";
Long t = new Date().getTime();
for (int i = 0; i < len; i++) {
if(t <= randomDates[i]) {
Intent myIntent = new Intent(MainActivity.this, Receiver.class);
if (i%2 == 1) {
type = "A";
} else {
type = "P";
}
myIntent.putExtra("type", type);
myIntent.putExtra("time", randomDates[i]);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, i, myIntent, PendingIntent.FLAG_ONE_SHOT);
alarmManager[i] = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager[i].set(AlarmManager.RTC, randomDates[i], pendingIntent);
intentArray.add(pendingIntent);
}
}
sharedPref = getSharedPreferences("MyCalApp",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean("areAlarmsAlreadySet", false);
editor.putString("alarmDates",Arrays.toString(randomDates));
editor.commit();
public void onReceive(Context context, Intent intent) {
if(intent.getAction() != null && intent.getAction().equalsIgnoreCase("android.intent.action.BOOT_COMPLETED")) {
Long[] randomDates1 = //get from shared Pref;
int len = randomDates1.length;
AlarmManager[] alarmManager = new AlarmManager[len];
ArrayList<PendingIntent> intentArray = new ArrayList();
String type = "A";
Long t = new Date().getTime();
for (int i = 0; i < len; i++) {
if (t <= randomDates1[i]) {
Intent myIntent = new Intent(context.getApplicationContext(), NotificationService.class);
if (i % 2 == 1) {
type = "A";
} else {
type = "P";
}
myIntent.putExtra("type", type);
myIntent.putExtra("time", randomDates1[i]);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, myIntent, PendingIntent.FLAG_ONE_SHOT);
alarmManager[i] = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
alarmManager[i].set(AlarmManager.RTC, randomDates1[i], pendingIntent);
intentArray.add(pendingIntent);
}
}
}
}
intent.setClass (context, NotificationService.class);
context.startService(intent);
}
Bundle b = intent.getExtras();
String type = b.getString("type"); // This is line number 38.
Long time = intent.getLongExtra("time",1l);
我从活动中设置的警报中正确地获取所有通知。但获取NullpointerException
Caused by: java.lang.NullPointerException at com.example.android.basicnotifications.NotificationService.onStart(NotificationService.java:38)
这是我从意图中读到额外内容的地方。我错过了什么?任何帮助都很感激。
附言。所有必要的权限都在清单文件中设置。
在onreceive()
的末尾,执行以下操作:
intent.setClass (context, NotificationService.class);
context.startService(intent);
这将使用不包含“额外内容”的意图
启动服务
。导致NullPointerException的。
此外,在onreceive()
中有以下代码:
Intent myIntent = new Intent(context.getApplicationContext(), NotificationService.class);
...
myIntent.putExtra("type", type);
myIntent.putExtra("time", randomDates1[i]);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, myIntent, PendingIntent.FLAG_ONE_SHOT);
你需要更多地注意你正在做的事情。
我知道,要放入值,我可以,要检索值,我可以,但在下面的代码中,它的行为不像预期的那样。检索值时,我获得。 设置值的代码: 并且我正在检索BroadCaseReceiver的onReceive中的值:[省略的无关代码]
在拦截器中自动连接loggingService时,我正在获取。该bean在拦截器中不可用。但正如我所说的,它可以在主应用程序中注入和使用。 也不能在拦截器中使用读取属性。 这是我的拦截器课。 这是我的配置类,我在其中向主应用程序注册拦截器 我的问题几乎类似于这篇文章不能自动连接HandlerInterceptorAdapter中的服务,但它的不同之处在于我引用了另一个模块中的拦截器,而正如他们所建
我正在使用org.springframework.data.jpa.repository.JpaRepository保存方法来保存一个实体。我认为保存方法来自CrudRepository接口。我从服务类调用这个保存方法。 但问题是< code > DataIntegrityViolationException 在catch块中没有被捕获。相反,我在下面的日志中看到。 和 我甚至尝试捕获Constr
我想从接收正常文件路径,如下所示: 这个文件也存在,但我不能得到它。我在这里看到了一些建议获得路径的问题,如下所示: 但此方法返回以下异常: 因此,我在这里收到的: 如何将文件转换为字符串:
我有一个简单的spring cloud项目,它包含4个服务: 配置:8888 登记处(尤里卡):8761 网关(zuul):8080 服务-1:9527 在此输入图像说明 如果将项目部署在localhost中, 我可以在没有Docker的情况下通过zuul成功获取Service-1的api: http://localhost:8080/service-1/test 但当我使用docker进行部署时