Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-推送通知仅显示最后一个id_Android_Push Notification_Broadcastreceiver_Alarmmanager - Fatal编程技术网

android-推送通知仅显示最后一个id

android-推送通知仅显示最后一个id,android,push-notification,broadcastreceiver,alarmmanager,Android,Push Notification,Broadcastreceiver,Alarmmanager,我有一个应用程序,用于创建带有推送通知的例行任务。当我添加多个任务(每个任务都有一个唯一的ID)并显示推送通知时,它会显示上一个任务的数据。 我使用LogCat进行了检查,确保在TaskActivity中,每个任务都有一个唯一的ID,但在AlarmService中,只显示最后输入的任务 我搜索了很多,但也找不到任何关于出错原因的线索 我还将pendingent.FLAG_UPDATE_CURRENT更改为FLAG_CANCEL_CURRENT和FLAG_ONE_SHOT,但它不起作用 我曾想过为

我有一个应用程序,用于创建带有推送通知的例行任务。当我添加多个任务(每个任务都有一个唯一的ID)并显示推送通知时,它会显示上一个任务的数据。 我使用LogCat进行了检查,确保在TaskActivity中,每个任务都有一个唯一的ID,但在AlarmService中,只显示最后输入的任务

我搜索了很多,但也找不到任何关于出错原因的线索

我还将
pendingent.FLAG_UPDATE_CURRENT
更改为
FLAG_CANCEL_CURRENT
FLAG_ONE_SHOT
,但它不起作用

我曾想过为每项任务添加一个
意图
,但我找不到一种方法来完成它

任务活动

   .
   .
   .
    public void setNotificationForNewTaskInside() {
    alarmManager = (AlarmManager) getApplicationContext().getSystemService(
            ALARM_SERVICE);
    Intent alarmIntent = new Intent(this,AlarmReceiver.class);

    Random random = new Random();
    randomNum= random.nextInt(9999 - 1000) + 1000;

     pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
             randomNum, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    if (DeviceTimeAndDate.devicetaskTimeDate.equals(newtaskTimeDate)) {

       finalLong=System.currentTimeMillis();

        alarmManager.setExact(AlarmManager.RTC_WAKEUP, finalLong, pendingIntent);

    }
   else   if (DeviceTimeAndDate.devicetaskTimeDate.before(newtaskTimeDate)) {

       finalLong=new_task_timeInMilliseconds;
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, finalLong, pendingIntent);

    } else if (DeviceTimeAndDate.devicetaskTimeDate.after(newtaskTimeDate)) {

        Toast.makeText(context, "زمان یا تاریخ مورد گذشنه است، لطفا زمان دیگری را انتخاب کنید", Toast.LENGTH_SHORT).show();
        startDate.setText(DeviceTimeAndDate.deviceTime);
        taskTime.setText(EditTaskActivity.secondMiConver);
    }
AlarmReceiver

 public class AlarmReceiver  extends BroadcastReceiver {
 String TAG = "AlarmReceiver";
  public RemoteViews remoteViews;
public  Uri sound;
public Context context;
public Notification notification;
int finalRandumNum;
 public  static String getTitle,getTime;
public AlarmReceiver (){
}

@Override
    public void onReceive(Context context, Intent intent) {

    sound = Uri.parse("android.resource://" + context.getPackageName() + "/raw/plucky");
      remoteViews= new RemoteViews(context.getPackageName(), R.layout.notification);
        remoteViews.setImageViewResource(R.id.notif_image, R.mipmap.ic_launcher);
      remoteViews.setTextViewText(R.id.title,getTitle);
     remoteViews.setTextViewText(R.id.text,getTime);

    NotificationManager notif=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    android.app.Notification notify=new NotificationCompat.Builder(context, "CHANNEL_ID")
            .setContentTitle(TaskActivity.subjEntry)
            .setWhen(finalLong)
            .setSound(sound)
            .setContentText(TaskActivity.timeEntryy)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentIntent(TaskActivity.pendingIntent)
            .build();

    notif.notify(TaskActivity.randomNum, notify);

我认为您将任务详细信息保存在变量(taskavity.subjection和taskavity.timeEntryy)中是一个错误,这意味着每次尝试添加新任务时都会替换数据

因此,您应该将数据保存在数据库、数组或任何其他数据结构中,并在创建通知时检索数据

将数据保存到SQlite数据库 下面是从SQLite数据库检索数据的代码
public List getData(字符串键){
字符串列[]={
“键”、“子项”、“子项时间”
};
字符串排序顺序=“subtime ASC”;
List dataList=newarraylist();
SQLiteDatabase mdDatabase=getWritableDatabase();
Cursor Cursor=mdDatabase.query(“tablename”,
柱,
无效的
无效的
无效的
无效的
排序顺序);
if(cursor.moveToFirst()){
做{
if(cursor.getString(cursor.getColumnIndex(“subjection”)).equals(Key)){
}
数据=新数据();
data.setsubjEntry(cursor.getString(cursor.getColumnIndex(“subjection”));
data.setsubjTime(cursor.getString(cursor.getColumnIndex(“subtime”)));
dataList.add(数据);
}while(cursor.moveToNext());
}
mdDatabase.close();
cursor.close();
返回数据列表;
}'

或者试试

我想我明白了,谢谢。我已经将数据以
ContentValues(key,value)
格式保存在数据库中。但我不知道我该如何找回它。我应该使用
游标吗?
 public void addData(Data data){

    SQLiteDatabase database = getWritableDatabase();
    ContentValues cv_data = new ContentValues();
    cv_data.put("key", data.key());
    cv_data.put("subjEntry", data.subjEntry());
    cv_data.put("subjTime", data.subjTime());

   database.insert("tablename",null,cv_data);
   database.close();
}
   public List<Data> getData(String key){

    String columns [] = {
         "key", "subjEntry", "subjTime"
    };

    String sortingOrder = " subjTime ASC";

    List <Data> dataList = new ArrayList <Data>();

    SQLiteDatabase mdDatabase = getWritableDatabase();

    Cursor cursor = mdDatabase.query("tablename",
            columns,
            null,
            null,
            null,
            null,
            sortingOrder);
    if (cursor.moveToFirst()){
        do {
        if(cursor.getString(cursor.getColumnIndex("subjEntry")).equals(Key)){
        }
           Data data = new Data();
           data.setsubjEntry(cursor.getString(cursor.getColumnIndex("subjEntry")));
           data.setsubjTime(cursor.getString(cursor.getColumnIndex("subjTime")));
           dataList.add(data);
        }while (cursor.moveToNext());
    }
    mdDatabase.close();
    cursor.close();

    return dataList;
}'