gpt4 book ai didi

java - 异步任务执行后通知的非法监视器状态异常

转载 作者:行者123 更新时间:2023-11-29 21:19:45 26 4
gpt4 key购买 nike

我正在制作一个应用程序,只要在线存储的数据发生变化,它就会发出通知。为此,我使用 alarmmanager/broadcastreceiver 定期检查广播接收器中使用异步任务的任何更改。如果有任何变化,在线程的后执行部分,我会开始通知。 在“nm.notify();”这一行我使用调试器得到一个 InvocationTargetException,异常的原因是“IllegalMonitorStateException:对象在 notify() 之前未被线程锁定”有人可以阐明正在发生的事情吗?提前致谢。

OnPostExecute 的代码是:

@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
resultstr=result;
SharedPreferences sp=context.getSharedPreferences("Prefs", 3);
String oldresult=sp.getString("notification", "hello world");
if (resultstr.equals("unable to connect to internet")){}else if(resultstr.equals("")){}else
if (!oldresult.equals(resultstr)){
NotificationManager nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.ic_launcher,"Tax Tracker 2014",System.currentTimeMillis());
final Intent notificationIntent = new Intent(context,
FB.class);
PendingIntent p = PendingIntent
.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, "Tax Tracker 2014", "new info alert", p);
nm.notify();
SharedPreferences.Editor edit=sp.edit();
edit.putString("notification", resultstr).commit();
}
}

最佳答案

Ankit 你使用了错误的方法,你需要 NotificationManager 中定义的 notify(id,notification) 方法,但你使用的是 Object#notify().

我想你需要这个 NotificationManager#notify(int id, Notification notification)

public void notify (int id, Notification notification)

Post a notification to be shown in the status bar. If a notification with the same id has already been posted by your application and has not yet been canceled, it will be replaced by the updated information.

参数

id - An identifier for this notification unique within your application.
notification - A Notification object describing what to show the user. Must not be null.

异常原因,但我猜这不是您想要做的。

在调用 notify() 之前,您需要先锁定 nm,使用 synchronized(nm){nm.notify();}

关于java - 异步任务执行后通知的非法监视器状态异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20878902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com