1、今天自己做的是建立了数据库。准备将产生的数据存放到数据库之中。
主要的数据库代码人如下:
package com.example.dingwei2.DBOpenMessageUser; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import androidx.annotation.Nullable; import com.example.dingwei2.bean.location; public class DBOpenMessageUserlocation extends SQLiteOpenHelper { final String db_location="create table db_location (_id integer primary key autoincrement,username varchar,date varchar,points varchar,distance integer,time varchar,energy integer,speed integer)"; public DBOpenMessageUserlocation(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(db_location); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i("数据","更新"+"oldVerSion"+"-->"+newVersion); } /** *数据库的相关操作 * **/ //增加信息 public void insertlocation(SQLiteDatabase sqLiteDatabase, location location) { ContentValues cv = new ContentValues(); cv.put("username", location.username); cv.put("date", location.date); cv.put("points", location.points); cv.put("time", location.time); cv.put("distance", location.distance); cv.put("energy", location.energy); cv.put("speed", location.speed); sqLiteDatabase.insert(db_location, null, cv); } //删除信息 public void deletebyid(Integer id) { SQLiteDatabase database = getWritableDatabase(); database.execSQL("delete from db_location where id=?", new String[]{String.valueOf(id)}); } //查找 // database.execSQL("delete from db_location where date=? and username=?", new String[]{date,username}); public Cursor getAllLocation(String username) { SQLiteDatabase database = getWritableDatabase(); return database.query("db_wen", null, "username=?",new String[]{username},null, null,"distance desc" );//"userdata desc" } // public void updatauser(String username,String usercheck) // { // SQLiteDatabase database = getWritableDatabase(); // ContentValues values=new ContentValues(); // values.put("usercheck",usercheck); // database.update("db_wen",values,"username=?",new String[]{username}); // } // public void updatauserpicture(String username,String userpicture) // { // SQLiteDatabase database = getWritableDatabase(); // ContentValues values=new ContentValues(); // values.put("userpicture",userpicture); // database.update("db_wen",values,"username=?",new String[]{username}); // } // public void updatapassword(String username,String password) // { // SQLiteDatabase database = getWritableDatabase(); // ContentValues values=new ContentValues(); // values.put("password",password); // database.update("db_wen",values,"username=?",new String[]{username}); // } }
2、今天完成了整个闹钟功能的实现,但是整体来说还有几个细节性的问题,比如长按删除闹钟会弹出两次提示框,还有就是当退出APP再进入时,所有的闹钟都变成了关闭状态,估计是哪里的细节出现了问题,但是总的来说今天还是挺有成就的。明天的工作就只剩解决这两个问题了。下面是主要代码以及运行效果图。
package com.alarm; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Build; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import com.example.keeprunning1.R; import java.util.Calendar; import java.util.List; import static android.content.Context.ALARM_SERVICE; public class AlarmAdapter extends BaseAdapter { private List<Alarm> mlist; private Context mContext; private LayoutInflater mlayoutInflater; private AlarmOperator malarmOperator;; Calendar calendar ; public AlarmAdapter(Context context,List<Alarm> list){ mContext=context; mlist=list; mlayoutInflater=LayoutInflater.from(context); malarmOperator=new AlarmOperator(context); } public void refresh(List<Alarm> list){ mlist=list; notifyDataSetChanged(); } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); } @Override public int getCount() { return mlist.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if(convertView==null){ viewHolder=new ViewHolder(); convertView=mlayoutInflater.inflate(R.layout.alarmitem,null); viewHolder.mHour=convertView.findViewById(R.id.hour); viewHolder.mMinute=convertView.findViewById(R.id.minute); viewHolder.mContent=convertView.findViewById(R.id.content_item); viewHolder.mClockType=convertView.findViewById(R.id.switch_control); viewHolder.todetail=convertView.findViewById(R.id.todetail); convertView.setTag(viewHolder); }else{ viewHolder=(ViewHolder)convertView.getTag(); } final Alarm bean=mlist.get(position); final String name=bean.getUsername(); final String hour=bean.getHour(); final String minute=bean.getMinute(); Log.i("name", name); viewHolder.mClockType.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { malarmOperator.updateswitch(name,hour,minute); viewHolder.mClockType.setChecked(true); Toast.makeText(mContext, "开启闹钟", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(mContext, CallAlarm.class); PendingIntent sender = PendingIntent.getBroadcast( mContext, 0, intent, 0); AlarmManager am; //使用闹钟服务 am = (AlarmManager) mContext.getSystemService(ALARM_SERVICE); calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); // calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(bean.getHour())); calendar.set(Calendar.MINUTE, Integer.parseInt(bean.getMinute())); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Log.e("TAG",calendar.getTimeInMillis()+""); Log.e("TAG",System.currentTimeMillis()+""); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (System.currentTimeMillis()>calendar.getTimeInMillis()+40000){ //加24小时 am.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()+86400000, sender); }else { am.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); } } // calendar = Calendar.getInstance(); // int mhour = calendar.get(Calendar.HOUR_OF_DAY); // int mminute = calendar.get(Calendar.MINUTE); // Log.d("Hour", String.valueOf(mhour)); // Log.d("Minute", String.valueOf(mminute)); // final MediaPlayer mMediaPlayer; // if(bean.getHour().equals(mhour)&&bean.getMinute().equals(mminute)){ // mMediaPlayer= MediaPlayer.create(mContext, R.raw.alarmmusic); // mMediaPlayer.start(); // new AlertDialog.Builder(mContext) // .setIcon(R.drawable.clock) // .setTitle("闹钟响了") // .setCancelable(false) // .setMessage("时间到了!") // .setPositiveButton("关掉" // , new DialogInterface.OnClickListener() { // @Override // public void onClick(DialogInterface dialog, int which) { // mMediaPlayer.stop(); // } // }).show(); // } }else if(!isChecked){ malarmOperator.updateswitch1(name,hour,minute); viewHolder.mClockType.setChecked(false); Intent intent = new Intent(mContext, CallAlarm.class); PendingIntent sender=PendingIntent.getBroadcast( mContext,0, intent, 0); AlarmManager am; am =(AlarmManager)mContext.getSystemService(ALARM_SERVICE); am.cancel(sender); Toast.makeText(mContext, "关闭闹钟", Toast.LENGTH_SHORT).show(); } } }); viewHolder.todetail.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { AlertDialog.Builder builder=new AlertDialog.Builder(mContext); builder.setMessage("确定删除?"); builder.setTitle("提示"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { malarmOperator.deletebyuser(name,hour,minute); refresh(mlist); Toast.makeText(mContext, "删除成功", Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create().show(); return false; } }); // int clockType=bean.getClockType(); // Log.d("volley", String.valueOf(clockType)); // if(clockType==1){ // viewHolder.mClockType.setChecked(true); // } // if(clockType==0){ // viewHolder.mClockType.setChecked(true); // } viewHolder.mContent.setText(bean.content); viewHolder.mHour.setText(bean.hour); viewHolder.mMinute.setText(bean.minute); return convertView; } public class ViewHolder{ public TextView mHour; public TextView mMinute; public TextView mContent; public Switch mClockType; LinearLayout todetail; //public CheckBox mCheckBox; } }
3.昨天的问题解决了,新建了一个文件,就不知为什么不闪退了,今天日历出来了,并且想把签到的信息存放到数据库中,今天完成了部分数据库创建的代码,明天希望可以有很大的突破,相关代码如下:
package com.example.rili; import android.text.style.TtsSpan; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; public class DateUtil { private static final String TAG = "DateUtil--->>>"; public static int year; public static int month; public static int day; public static String current; static{ Calendar a=Calendar.getInstance(); year=a.get(Calendar.YEAR); month=a.get(Calendar.MONTH)+1; day=a.get(Calendar.DAY_OF_MONTH); current=getDate(new Date(),"YYY-MM-dd"); } public static String getDate(Date source,String style) { SimpleDateFormat mdhm = new SimpleDateFormat(style, Locale.getDefault());//年 月 日 return mdhm.format(source); } public static Date getDate(int y,int m,int d) { Calendar calendar = Calendar.getInstance(); calendar.set(y,m-1,d); //月减一 return calendar.getTime(); } public static String getDate(Date source) { SimpleDateFormat mdhm = new SimpleDateFormat("YYYY-MM-dd",Locale.getDefault());//年 月 日 return mdhm.format(source); } public static int getCurrentMonthLastDay(int year,int month) { Calendar a = Calendar.getInstance(); a.set(year,month-1,1);//把日期设置为当月第一天 月减一 a.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天 return a.get(Calendar.DATE); } public static int getFirstDayOfMonth(int year,int month){ Calendar a = Calendar.getInstance(); a.set(year,month-1,1); //月要减一 a.set(Calendar.DAY_OF_MONTH,1);//设为第一天 return a.get(Calendar.DAY_OF_WEEK); } // 字符串类型日期转化成date类型 public static Date strToDate(String style, String date) { SimpleDateFormat formatter = new SimpleDateFormat(style,Locale.getDefault()); try { return formatter.parse(date); } catch (ParseException e) { e.printStackTrace(); return new Date(); } } public static String calendarToDateTime(Calendar calendar, String style) { Date time = calendar.getTime(); return getDate(time,style); } public static int[] getymd(String formatDateString) { int[] ymd = new int[3]; ymd[0] = Integer.parseInt(formatDateString.substring(0, 4)); ymd[1] = Integer.parseInt(formatDateString.substring(formatDateString.indexOf("-") + 1, formatDateString.lastIndexOf("-"))); ymd[2] = Integer.parseInt(formatDateString.substring(formatDateString.lastIndexOf("-") + 1, formatDateString.length())); return ymd; } public static List<Boolean> dateConvert(int year, int month, List<String> source, List<Boolean> record, int dif) { for (String s : source) { int[] ymd = getymd(s); if (year == ymd[0] && month == ymd[1]) {//年月相同 record.set(ymd[2] + dif, true); } } return record; } }
package com.example.rili.sign; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; public class LocalDbOpenHelper extends SQLiteOpenHelper { //根据用户id创建数据库,假设为5 private final static int UID=5; private final static String TABLE_SIGN_IN="signIn";//表名 private final static String COLUMN_NAME_DATE="date";//日期列名 private static final String SQL_CREATE_SIGN="CREATE TABLE " + TABLE_SIGN_IN + " (" + COLUMN_NAME_DATE + " VARCHAR(30) " + ")"; private static final String SQL_DELETE_SIGN_IN = "DROP TABLE IF EXISTS " + TABLE_SIGN_IN; public static final int DATABASE_VERSION = 1; //数据库版本号 public static final String DATABASE_NAME = "local_"+UID+".db"; //数据库名字 public LocalDbOpenHelper(@Nullable Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CREATE_SIGN);//创建签到表 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(SQL_DELETE_SIGN_IN);//删除旧表 onCreate(db);//新建版本表 } public void dropTable(){ SQLiteDatabase db=getReadableDatabase(); db.execSQL(SQL_CREATE_SIGN);//删除旧表 onCreate(db);//新建版本表 } }
package com.example.rili.view; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.example.rili.DateAdapter; import com.example.rili.DateUtil; import com.example.rili.R; //签到控件 public class SignView extends LinearLayout { private TextView tvYear; private SignGridView gvDate; private DateAdapter adapterDate; public SignView(Context context) { super(context); init(); } public SignView(Context context,AttributeSet attrs){ super(context,attrs); init(); } public SignView(Context context, AttributeSet attrs,int defStyleAttr){ super(context,attrs,defStyleAttr); init(); } public void init(){ init(DateUtil.year,DateUtil.month); } public void init(int year,int month){ View view=View.inflate(getContext(), R.layout.layout_signdate,this); tvYear=view.findViewById(R.id.tvYear); gvDate=view.findViewById(R.id.gvDate); tvYear.setText(year+"-"+month); adapterDate=new DateAdapter(getContext(),year,month); gvDate.setAdapter(adapterDate); } public void signIn(DateAdapter.OnSignListener onSignListener){ adapterDate.signIn(onSignListener); } public boolean isSign(){ return adapterDate.isSign(); } }
运行截图:
原文:https://www.cnblogs.com/yumazemadui/p/12763688.html