问题描述
在这里,我尝试通过以下方法更新提醒: 单击卡视图浮动弹出窗口后,创建的提醒将在卡视图(回收站)中 将会打开,我需要从单击的卡片视图中读取数据,然后在浮动弹出窗口的文本字段中读取数据 通过在同一窗口中按下更新按钮进行更新(使用sqlite RoomDatabase)
这是我的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 (将#修改为@)