Android中的空光标

Gab*_*aby 5 notifications android

我的应用程序中存在问题.我有一些列表,每个都有一个日期.如果列表的日期是今天我发了通知,并在我的通知中我放了该列表中的项目.问题是,如果我的列表为空,我会强制关闭.我把条件只在光标不为空时发出通知,但似乎这不起作用.你能帮我找到问题所在吗?

这是代码的一部分:

cr = db.fetchListId(id);
startManagingCursor(cr);

s = new StringBuilder(100);
if (cr != null) {
  do {
    String myList = "";
    myList += cr.getString(2) + " " + cr.getString(3)
      + cr.getString(4) + "," + "\n";
    s.append(myList);

  } while (cr.moveToNext());
  s.append('.');
  System.out.println("!!heyeheeye!" + s + "!!!!");
  hey(list);
}

where hey(list) is a function where is made the notification.

  private void hey(String list) {
  notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
  CharSequence NotificationTicket = "Hey";

  long when = System.currentTimeMillis();

  Notification notification = new Notification(R.drawable.icon,
                                               NotificationTicket, when);

  RemoteViews contentView = new RemoteViews(getPackageName(),
                                            R.layout.proba);
  contentView.setImageViewResource(R.id.image, R.drawable.icon);
  contentView.setTextViewText(R.id.notif,
                              "Today,you must go for shopping for your list '" + list + "'. "
                              + "Don't forget!!!" + "\n" + "You must buy :" + "\n"
                              + s.toString() + "\n");
  notification.contentView = contentView;


  Context context = getApplicationContext();

  Intent notifyIntent = new Intent(context, Lists.class);

  Intent notificationIntent = new Intent(this, Lists.class);
  PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                                                          notificationIntent, 0);
  notification.contentIntent = contentIntent;

  notificationManager.notify(ID_NOTIFICATION, notification);
  notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP


               | Intent.FLAG_ACTIVITY_SINGLE_TOP);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*her 6

添加以下检查以查看游标是否有任何结果:

if (cr != null && cr.moveToFirst()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在获取数据之前,您需要moveToFirst().因为你使用的是do ...而不是while(),所以你没有正确初始化光标.