zoukankan      html  css  js  c++  java
  • 团队冲刺第九天

    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();
        }
    }

    运行截图:

  • 相关阅读:
    Nancy 寄宿IIS
    原子操作
    CSRF跨站请求伪造
    CORS跨域
    C# 运算符
    Mysql 函数
    Mongodb for .Net Core 驱动的应用
    Mongodb for .Net Core 封装类库
    制作项目模板
    压缩图片
  • 原文地址:https://www.cnblogs.com/yumazemadui/p/12763688.html
Copyright © 2011-2022 走看看