我正在创建一个应用程序,通知在线存储的数据发生变化时。为此,我使用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();
}
}
答案 0 :(得分:2)
Ankit您使用的是错误的方法,您需要notify(id,notification)
中定义的NotificationManager
方法,但您使用的是Object#notify()
。
我认为你需要这个NotificationManager#notify(int id, Notification notification)
public void notify (int id, Notification notification)
发布要在状态栏中显示的通知。如果是通知 具有相同ID的已经由您的应用程序发布并具有 尚未取消,将被更新的信息取代。
参数
id - An identifier for this notification unique within your application.
notification - A Notification object describing what to show the user. Must not be null.
异常的原因,但这不是你想做的事情。
在使用nm
致电notify()
之前,您需要先在synchronized(nm){nm.notify();}
上按住锁定。
答案 1 :(得分:0)
您需要先锁定监视器,然后再调用wait()或notify()。
尝试将其放入synchronized(nm)
块。