如何在此提醒应用程序中进行更新?

问题描述

在这里,我尝试通过以下方法更新提醒: 单击卡视图浮动弹出窗口后,创建的提醒将在卡视图(回收站)中 将会打开,我需要从单击的卡片视图中读取数据,然后在浮动弹出窗口的文本字段中读取数据 通过在同一窗口中按更新按钮进行更新(使用sqlite RoomDatabase) 我尝试这样做,但无法更新

我在此处附有屏幕截图 Card View floating popup window

这是我的Mainpage.java

package com.example.reminderapp;

import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.linearlayoutmanager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

public class MainPage extends AppCompatActivity {

    private FloatingActionButton add;
    private Dialog dialog;
    private AppDatabase appDatabase;
    private RecyclerView recyclerView;
    private AdapterReminders adapter;
    private List<Reminders> temp;
    private TextView empty;
    public ImageView delete;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_page);


        appDatabase = AppDatabase.geAppdatabase(MainPage.this);

        add = findViewById(R.id.floatingButton);
        empty = findViewById(R.id.empty);
        delete = findViewById(R.id.delete_btn);

        //floating button (+)
        add.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addReminder();
            }
        });



        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(MainPage.this);
        recyclerView.setLayoutManager(linearlayoutmanager);
        setItemsInRecyclerView();

    }




    public void addReminder(){

        //Floating Popup window
        dialog = new Dialog(MainPage.this);
        dialog.setContentView(R.layout.floating_popup);

        final TextView textView = dialog.findViewById(R.id.date);
        Button add;
        final TextView select;
        select = dialog.findViewById(R.id.date);

        //set button
        add = dialog.findViewById(R.id.addButton);
        final EditText message = dialog.findViewById(R.id.message);


        //select Date (Text View) in the floating popup window
        final Calendar newCalender = Calendar.getInstance();
        select.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatePickerDialog dialog = new DatePickerDialog(MainPage.this,new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view,final int year,final int month,final int dayOfMonth) {

                        final Calendar newDate = Calendar.getInstance();
                        Calendar newTime = Calendar.getInstance();
                        TimePickerDialog time = new TimePickerDialog(MainPage.this,new TimePickerDialog.OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker view,int hourOfDay,int minute) {

                                newDate.set(year,month,dayOfMonth,hourOfDay,minute,0);
                                Calendar tem = Calendar.getInstance();
                                Log.w("TIME",System.currentTimeMillis()+"");
                                if(newDate.getTimeInMillis()-tem.getTimeInMillis()>0)
                                    textView.setText(newDate.getTime().toString());
                                else
                                    Toast.makeText(MainPage.this,"Invalid time",Toast.LENGTH_SHORT).show();

                            }
                        },newTime.get(Calendar.HOUR_OF_DAY),newTime.get(Calendar.MINUTE),true);
                        time.show();

                    }
                },newCalender.get(Calendar.YEAR),newCalender.get(Calendar.MONTH),newCalender.get(Calendar.DAY_OF_MONTH));

                dialog.getDatePicker().setMinDate(System.currentTimeMillis());
                dialog.show();

            }
        });



        //Set Button in the floating popup window
        add.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Check if all the fields are filled
                if (select.getText().toString().isEmpty() ||message.getText().toString().isEmpty()){
                    Toast.makeText(MainPage.this,"Please fill all the fields",Toast.LENGTH_SHORT).show();
                    return;
                }

                RoomDAO roomDAO = appDatabase.getRoomDAO();
                Reminders reminders = new Reminders();
                reminders.setMessage(message.getText().toString().trim());
                Date remind = new Date(textView.getText().toString().trim());
                reminders.setRemindDate(remind);
                roomDAO.Insert(reminders);
                List<Reminders> l = roomDAO.getAll();
                reminders = l.get(l.size()-1);
                Log.e("ID chahiye",reminders.getId()+"");

                Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+5:30"));
                calendar.setTime(remind);
                calendar.set(Calendar.SECOND,0);
                Intent intent = new Intent(MainPage.this,NotifierAlarm.class);
                intent.putExtra("Message",reminders.getMessage());
                intent.putExtra("RemindDate",reminders.getRemindDate().toString());
                intent.putExtra("id",reminders.getId());
                PendingIntent intent1 = PendingIntent.getbroadcast(MainPage.this,reminders.getId(),intent,PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
                alarmManager.setExact(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),intent1);

                Toast.makeText(MainPage.this,"Remind Set Successfully",Toast.LENGTH_SHORT).show();
                setItemsInRecyclerView();
                AppDatabase.destroyInstance();
                dialog.dismiss();

            }
        });


        dialog.getwindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.show();

    }

    //New
    public void deleteReminder(){

        final ImageView delete;
        delete  = findViewById(R.id.delete_btn);
        delete.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RoomDAO roomDAO = appDatabase.getRoomDAO();
                Reminders reminders = new Reminders();
                roomDAO.Delete(reminders);
                AppDatabase.destroyInstance();

            }
        });
    }

    //Remove or delete item
    public void removeItem(Reminders element,int position) {

        RoomDAO roomDAO = appDatabase.getRoomDAO();
        roomDAO.Delete(element);
        AppDatabase.destroyInstance();
        temp.remove(position);
        adapter.notifyItemRemoved(position);

        //Cancelling alarm
        Intent intent = new Intent(MainPage.this,NotifierAlarm.class);
        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        PendingIntent intent1 = PendingIntent.getbroadcast(MainPage.this,element.getId(),PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.cancel(intent1);

    }

    //new
    //update function
    public void updateItem(final Reminders elements,final int position) {

        adapter.notifyItemChanged(position);


        //update button function
        update.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RoomDAO roomDAO = appDatabase.getRoomDAO();
                roomDAO.Update(elements);
                AppDatabase.destroyInstance();
                temp.get(position);
            }
        });


        //It will be in last like add reminder()
        dialog.getwindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.show();
    }



    public void setItemsInRecyclerView(){

        RoomDAO dao = appDatabase.getRoomDAO();
        temp = dao.orderThetable();
        if(temp.size()>0) {
            empty.setVisibility(View.INVISIBLE);
            recyclerView.setVisibility(View.VISIBLE);
        }
        adapter = new AdapterReminders(temp);
        recyclerView.setAdapter(adapter);

        adapter.setonItemClickListener(new AdapterReminders.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                updateItem(temp.get(position),position);
            }

            @Override
            public void onDeleteClick(int position) {
          //      Toast.makeText(MainPage.this,position + "",Toast.LENGTH_SHORT).show();
                removeItem(temp.get(position),position);
                RoomDAO roomDAO = appDatabase.getRoomDAO();
                Reminders reminders = new Reminders();
                roomDAO.Delete(reminders);
            }

            @Override
            public void onItemClick(AdapterView<?> adapterView,View view,int i,long l) {

            }
        });


    }
}

这是我的适配器类:AdapterReminders.java

package com.example.reminderapp;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;

public class AdapterReminders extends RecyclerView.Adapter<AdapterReminders.MyViewHolder>{

    private List<Reminders> allReminders;
    private TextView message,time;

    //new
    public ImageView delete;
    //new
    private AdapterView.OnItemClickListener mListener;

    //new
    public interface OnItemClickListener extends AdapterView.OnItemClickListener {
        void onItemClick(int position);
        void onDeleteClick(int position);
        //new
        @Override
        void onItemClick(AdapterView<?> adapterView,long l);
    }

    //new
    public void setonItemClickListener(OnItemClickListener listener)
    {
        mListener = listener;
    }

    public AdapterReminders(List<Reminders> allReminders) {
        this.allReminders = allReminders;

    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,int i) {

        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.reminder_item,viewGroup,false);
        MyViewHolder myViewHolder = new MyViewHolder(view,(OnItemClickListener) mListener);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder,int i) {

        Reminders reminders = allReminders.get(i);
        if(!reminders.getMessage().equals(""))
            message.setText(reminders.getMessage());
        else
            message.setHint("Task Name is Empty");
        time.setText(reminders.getRemindDate().toString());

    }

    @Override
    public int getItemCount() {
        return allReminders.size();
    }


    //new add set on clicklistner for card view
    //Holder class
    public class MyViewHolder extends RecyclerView.ViewHolder{

        public MyViewHolder(@NonNull View itemView,final OnItemClickListener listener) {
            super(itemView);

            //Those are in the item card view
            message = itemView.findViewById(R.id.tittleTV);
            time = itemView.findViewById(R.id.timeDateTV);

            //new
            delete = itemView.findViewById(R.id.delete_btn);

            //set On click listner for card view
            itemView.setonClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (listener != null) {
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION) {
                            listener.onItemClick(position);
                        }
                    }
                }
            });

            //new
            delete.setonClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null) {
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION) {
                            listener.onDeleteClick(position);

                        }
                    }
                }
            });

        }

    }

}

这个RoomDAO.java:我正在使用sqlite会议室数据库 在这里,我删除了一些限制(30000)内容代码。但附有必要的内容

package com.example.reminderapp;

import android.arch.persistence.db.SupportsqliteStatement;
import android.arch.persistence.room.EntityDeletionorUpdateAdapter;
import android.arch.persistence.room.EntityInsertionAdapter;
import android.arch.persistence.room.RoomDatabase;
import android.arch.persistence.room.RoomsqliteQuery;
import android.database.Cursor;
import java.lang.Long;
import java.lang.Override;
import java.lang.String;
import java.lang.SuppressWarnings;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@SuppressWarnings("unchecked")
public class RoomDAO_Impl implements RoomDAO {
  private final RoomDatabase __db;

  private final EntityInsertionAdapter __insertionAdapterOfUsernamePassword;

  private final EntityInsertionAdapter __insertionAdapterOfReminders;

  private final DateTypeConverter __dateTypeConverter = new DateTypeConverter();

  private final EntityDeletionorUpdateAdapter __deletionAdapterOfUsernamePassword;

  private final EntityDeletionorUpdateAdapter __deletionAdapterOfReminders;

  private final EntityDeletionorUpdateAdapter __updateAdapterOfUsernamePassword;

  private final EntityDeletionorUpdateAdapter __updateAdapterOfReminders;

  public RoomDAO_Impl(RoomDatabase __db) {
    this.__db = __db;
    this.__insertionAdapterOfUsernamePassword = new EntityInsertionAdapter<UsernamePassword>(__db) {
      @Override
      public String createquery() {
        return "INSERT OR ABORT INTO `login`(`usename`,`password`,`isloggedIn`) VALUES (?,?,?)";
      }

      @Override
      public void bind(SupportsqliteStatement stmt,UsernamePassword value) {
        if (value.getUsename() == null) {
          stmt.bindNull(1);
        } else {
          stmt.bindString(1,value.getUsename());
        }
        if (value.getpassword() == null) {
          stmt.bindNull(2);
        } else {
          stmt.bindString(2,value.getpassword());
        }
        stmt.bindLong(3,value.getIsloggedIn());
      }
    };
    this.__insertionAdapterOfReminders = new EntityInsertionAdapter<Reminders>(__db) {
      @Override
      public String createquery() {
        return "INSERT OR ABORT INTO `reminder`(`id`,`message`,`remindDate`) VALUES (nullif(?,0),Reminders value) {
        stmt.bindLong(1,value.id);
        if (value.getMessage() == null) {
          stmt.bindNull(2);
        } else {
          stmt.bindString(2,value.getMessage());
        }
        final Long _tmp;
        _tmp = __dateTypeConverter.DatetoLongConverter(value.getRemindDate());
        if (_tmp == null) {
          stmt.bindNull(3);
        } else {
          stmt.bindLong(3,_tmp);
        }
      }
    };
    this.__deletionAdapterOfUsernamePassword = new EntityDeletionorUpdateAdapter<UsernamePassword>(__db) {
      @Override
      public String createquery() {
        return "DELETE FROM `login` WHERE `usename` = ?";
      }

      @Override
      public void bind(SupportsqliteStatement stmt,value.getUsename());
        }
      }
    };
    this.__deletionAdapterOfReminders = new EntityDeletionorUpdateAdapter<Reminders>(__db) {
      @Override
      public String createquery() {
        return "DELETE FROM `reminder` WHERE `id` = ?";
      }

      @Override
      public void bind(SupportsqliteStatement stmt,value.id);
      }
    };
    this.__updateAdapterOfUsernamePassword = new EntityDeletionorUpdateAdapter<UsernamePassword>(__db) {
      @Override
      public String createquery() {
        return "UPDATE OR ABORT `login` SET `usename` = ?,`password` = ?,`isloggedIn` = ? WHERE `usename` = ?";
      }

      @Override
      public void bind(SupportsqliteStatement stmt,value.getIsloggedIn());
        if (value.getUsename() == null) {
          stmt.bindNull(4);
        } else {
          stmt.bindString(4,value.getUsename());
        }
      }
    };
    this.__updateAdapterOfReminders = new EntityDeletionorUpdateAdapter<Reminders>(__db) {
      @Override
      public String createquery() {
        return "UPDATE OR ABORT `reminder` SET `id` = ?,`message` = ?,`remindDate` = ? WHERE `id` = ?";
      }

      @Override
      public void bind(SupportsqliteStatement stmt,_tmp);
        }
        stmt.bindLong(4,value.id);
      }
    };
  }

  
  @Override
  public void Delete(Reminders reminders) {
    __db.beginTransaction();
    try {
      __deletionAdapterOfReminders.handle(reminders);
      __db.setTransactionSuccessful();
    } finally {
      __db.endTransaction();
    }
  }

  
  @Override
  public void Update(Reminders... reminders) {
    __db.beginTransaction();
    try {
      __updateAdapterOfReminders.handleMultiple(reminders);
      __db.setTransactionSuccessful();
    } finally {
      __db.endTransaction();
    }
  }

  @Override
  public UsernamePassword getUserwithUsername(String username) {
    final String _sql = "Select * from login where usename = ?";
    final RoomsqliteQuery _statement = RoomsqliteQuery.acquire(_sql,1);
    int _argIndex = 1;
    if (username == null) {
      _statement.bindNull(_argIndex);
    } else {
      _statement.bindString(_argIndex,username);
    }
    final Cursor _cursor = __db.query(_statement);
    try {
      final int _cursorIndexOfUsename = _cursor.getColumnIndexOrThrow("usename");
      final int _cursorIndexOfPassword = _cursor.getColumnIndexOrThrow("password");
      final int _cursorIndexOfIsloggedIn = _cursor.getColumnIndexOrThrow("isloggedIn");
      final UsernamePassword _result;
      if(_cursor.movetoFirst()) {
        _result = new UsernamePassword();
        final String _tmpusename;
        _tmpusename = _cursor.getString(_cursorIndexOfUsename);
        _result.setUsename(_tmpusename);
        final String _tmpPassword;
        _tmpPassword = _cursor.getString(_cursorIndexOfPassword);
        _result.setPassword(_tmpPassword);
        final int _tmpIsloggedIn;
        _tmpIsloggedIn = _cursor.getInt(_cursorIndexOfIsloggedIn);
        _result.setIsloggedIn(_tmpIsloggedIn);
      } else {
        _result = null;
      }
      return _result;
    } finally {
      _cursor.close();
      _statement.release();
    }
  }

  @Override
  public UsernamePassword getLoggedInUser() {
    final String _sql = "Select * from login where isloggedIn = 1";
    final RoomsqliteQuery _statement = RoomsqliteQuery.acquire(_sql,0);
    final Cursor _cursor = __db.query(_statement);
    try {
      final int _cursorIndexOfUsename = _cursor.getColumnIndexOrThrow("usename");
      final int _cursorIndexOfPassword = _cursor.getColumnIndexOrThrow("password");
      final int _cursorIndexOfIsloggedIn = _cursor.getColumnIndexOrThrow("isloggedIn");
      final UsernamePassword _result;
      if(_cursor.movetoFirst()) {
        _result = new UsernamePassword();
        final String _tmpusename;
        _tmpusename = _cursor.getString(_cursorIndexOfUsename);
        _result.setUsename(_tmpusename);
        final String _tmpPassword;
        _tmpPassword = _cursor.getString(_cursorIndexOfPassword);
        _result.setPassword(_tmpPassword);
        final int _tmpIsloggedIn;
        _tmpIsloggedIn = _cursor.getInt(_cursorIndexOfIsloggedIn);
        _result.setIsloggedIn(_tmpIsloggedIn);
      } else {
        _result = null;
      }
      return _result;
    } finally {
      _cursor.close();
      _statement.release();
    }
  }

  @Override
  public List<Reminders> orderThetable() {
    final String _sql = "Select * from reminder order by remindDate";
    final RoomsqliteQuery _statement = RoomsqliteQuery.acquire(_sql,0);
    final Cursor _cursor = __db.query(_statement);
    try {
      final int _cursorIndexOfId = _cursor.getColumnIndexOrThrow("id");
      final int _cursorIndexOfMessage = _cursor.getColumnIndexOrThrow("message");
      final int _cursorIndexOfRemindDate = _cursor.getColumnIndexOrThrow("remindDate");
      final List<Reminders> _result = new ArrayList<Reminders>(_cursor.getCount());
      while(_cursor.movetoNext()) {
        final Reminders _item;
        _item = new Reminders();
        _item.id = _cursor.getInt(_cursorIndexOfId);
        final String _tmpMessage;
        _tmpMessage = _cursor.getString(_cursorIndexOfMessage);
        _item.setMessage(_tmpMessage);
        final Date _tmpRemindDate;
        final Long _tmp;
        if (_cursor.isNull(_cursorIndexOfRemindDate)) {
          _tmp = null;
        } else {
          _tmp = _cursor.getLong(_cursorIndexOfRemindDate);
        }
        _tmpRemindDate = __dateTypeConverter.LongtoDateConverter(_tmp);
        _item.setRemindDate(_tmpRemindDate);
        _result.add(_item);
      }
      return _result;
    } finally {
      _cursor.close();
      _statement.release();
    }
  }

  @Override
  public Reminders getRecentEnteredData() {
    final String _sql = "Select * from reminder Limit 1";
    final RoomsqliteQuery _statement = RoomsqliteQuery.acquire(_sql,0);
    final Cursor _cursor = __db.query(_statement);
    try {
      final int _cursorIndexOfId = _cursor.getColumnIndexOrThrow("id");
      final int _cursorIndexOfMessage = _cursor.getColumnIndexOrThrow("message");
      final int _cursorIndexOfRemindDate = _cursor.getColumnIndexOrThrow("remindDate");
      final Reminders _result;
      if(_cursor.movetoFirst()) {
        _result = new Reminders();
        _result.id = _cursor.getInt(_cursorIndexOfId);
        final String _tmpMessage;
        _tmpMessage = _cursor.getString(_cursorIndexOfMessage);
        _result.setMessage(_tmpMessage);
        final Date _tmpRemindDate;
        final Long _tmp;
        if (_cursor.isNull(_cursorIndexOfRemindDate)) {
          _tmp = null;
        } else {
          _tmp = _cursor.getLong(_cursorIndexOfRemindDate);
        }
        _tmpRemindDate = __dateTypeConverter.LongtoDateConverter(_tmp);
        _result.setRemindDate(_tmpRemindDate);
      } else {
        _result = null;
      }
      return _result;
    } finally {
      _cursor.close();
      _statement.release();
    }
  }

  @Override
  public List<Reminders> getAll() {
    final String _sql = "Select * from reminder";
    final RoomsqliteQuery _statement = RoomsqliteQuery.acquire(_sql,0);
    final Cursor _cursor = __db.query(_statement);
    try {
      final int _cursorIndexOfId = _cursor.getColumnIndexOrThrow("id");
      final int _cursorIndexOfMessage = _cursor.getColumnIndexOrThrow("message");
      final int _cursorIndexOfRemindDate = _cursor.getColumnIndexOrThrow("remindDate");
      final List<Reminders> _result = new ArrayList<Reminders>(_cursor.getCount());
      while(_cursor.movetoNext()) {
        final Reminders _item;
        _item = new Reminders();
        _item.id = _cursor.getInt(_cursorIndexOfId);
        final String _tmpMessage;
        _tmpMessage = _cursor.getString(_cursorIndexOfMessage);
        _item.setMessage(_tmpMessage);
        final Date _tmpRemindDate;
        final Long _tmp;
        if (_cursor.isNull(_cursorIndexOfRemindDate)) {
          _tmp = null;
        } else {
          _tmp = _cursor.getLong(_cursorIndexOfRemindDate);
        }
        _tmpRemindDate = __dateTypeConverter.LongtoDateConverter(_tmp);
        _item.setRemindDate(_tmpRemindDate);
        _result.add(_item);
      }
      return _result;
    } finally {
      _cursor.close();
      _statement.release();
    }
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...