android本地备忘录助手

/* *    该类为主界面,通过侧滑,划出侧滑菜单,里面有制作人的信息,添加,查找,删除功能。
 *    主界面为白色,每三个物品信息为一行的卡片式布局呈现给用户,通过点击图片查看具体信息
 */
public class MainActivity extends AppCompatActivity {
    private DrawerLayout drawerLayout;
    private List<Goods> goodsList =new ArrayList<>();
    private goodsAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
//        setSupportActionBar(toolbar);
        drawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
        NavigationView navigationView=(NavigationView)findViewById(view);
        initGoods();
        RecyclerView recyclerView=(RecyclerView) findViewById(R.id.recycler_view);
        GridLayoutManager layoutManager=new GridLayoutManager(this,3);
        recyclerView.setLayoutManager(layoutManager);
        adapter=new goodsAdapter(goodsList);
        recyclerView.setAdapter(adapter);
        ActionBar actionBar=getSupportActionBar();
        if (actionBar!=null){
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
        navigationView.setCheckedItem(R.id.nav_add);    //默认选中
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener(){
            @Override
            public boolean onNavigationItemSelected( MenuItem item) {    //侧滑菜单里的选项
                switch (item.getItemId()) {
                    case R.id.nav_add:
                        Intent intent1=new Intent(MainActivity.this,AddActivity.class);
                        startActivity(intent1);
                        break;
                    case R.id.nav_search:
                        Intent intent=new Intent(MainActivity.this,SearchActivity.class);
                        startActivity(intent);
                        break;
                    case R.id.nav_delete:
                        Intent intent2=new Intent(MainActivity.this,deleteActivity.class);
                        startActivity(intent2);
                        break;
                    case R.id.nav_manage:
                       Toast.makeText(MainActivity.this,"目前还没有更多功能",Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;

                }

                return true;
            }
        });


    }
    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.view,menu);
        return true;

    }

    private void initGoods(){
        List<Goods> goods= DataSupport.findAll(Goods.class);      //读取全部数据
        for (int i=0;goods.size()>i;i++){                         //如果从数据库读取的数据小于总数据,则继续读取
            Goods good=new Goods("","","","",true,"");
            good.setName(goods.get(i).getName());
            good.setImageId(goods.get(i).getImageId());
            goodsList.add(good);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){

            case R.id.refresh:
                initGoods();
                Toast.makeText(this,"刷新成功",Toast.LENGTH_SHORT).show();
                break;

            default:
                break;
        }
        return true;
    }

}

 

/*
 *   该活动为登录界面,使用Litepal数据库存储,采用映射方法建表,用户账号密码存储在User1中
 *   记住密码功能采用的是键值对存储
 *   isremember为记住密码的逻辑判断
 *
 */
public class LoginActivity extends AppCompatActivity {
    private EditText user;
    private EditText password;
    private Button login;
    private Button register;
    private CheckBox remember;
    private SharedPreferences pref;
    private SharedPreferences.Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        user=(EditText)findViewById(R.id.user);
        password=(EditText)findViewById(R.id.password);
        login=(Button)findViewById(R.id.denglu);
        register=(Button)findViewById(R.id.zhuce);
        remember=(CheckBox)findViewById(R.id.remember);
        LitePal.getDatabase();                                         //建表
        pref= PreferenceManager.getDefaultSharedPreferences(this);
        boolean isremember=pref.getBoolean("remember",false);     //键值对存储
        if (isremember){
            String user1=pref.getString("user","");
            String password1=pref.getString("password","");
            user.setText(user1);
            password.setText(password1);
            remember.setChecked(true);
        }
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String user1=user.getText().toString();
                String password1=password.getText().toString();
                List<User> users= DataSupport.where("user=?",user1).find(User.class);       //登录判断
                if(users.size()<1){
                    AlertDialog.Builder dialog=new AlertDialog.Builder(LoginActivity.this);
                    dialog.setMessage("此用户不存在");
                    dialog.setCancelable(false);
                    dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });
                    dialog.show();
                }else{                                                                   //成功登陆
                    if(users.get(0).getPassword().equals(password1)){                    //得到数据库中第一个和user1相对应的密码和输入的密码进行比较
                        editor=pref.edit();
                        if (remember.isChecked()){
                            editor.putBoolean("remember",true);
                            editor.putString("user",user1);
                            editor.putString("password",password1);
                        }
                        else {
                            editor.clear();
                        }
                        editor.apply();
                        Intent intent=new Intent(LoginActivity.this,MainActivity.class);
                        startActivity(intent);
                    }
                    else {
                        AlertDialog.Builder dialog=new AlertDialog.Builder(LoginActivity.this);
                        dialog.setMessage("密码错误");
                        dialog.setCancelable(false);
                        dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                        dialog.show();
                    }
                }


            }
        });
        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(LoginActivity.this,RegisterActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
}
public class RegisterActivity extends AppCompatActivity {
    private EditText user;
    private EditText password;
    private EditText password1;
    private Button ok;
    private Button cancel;
/*
 *     该表为注册界面,用于向数据库里添加数据以及判断是否有重复的数据,如果有则不添加新的数据
 *     users为数据库符合条件的数值,user0为添加数据时创建的对象,user1为输入的账号
 *     password0为输入的密码,password00为重复的密码,用于进一步确认
 */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        user=(EditText)findViewById(R.id.user);
        password=(EditText)findViewById(R.id.password);
        password1=(EditText)findViewById(R.id.password1);
        ok=(Button)findViewById(R.id.ok);
        cancel=(Button)findViewById(R.id.cancel);
        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String user1=user.getText().toString();
                String password0=password.getText().toString();
                String password00=password1.getText().toString();
                List<User> users= DataSupport.where("user=?",user1).find(User.class);       //注册判断
                if (users.size()>0){                                                         //判断用户名是否重复
                    AlertDialog.Builder dialog=new AlertDialog.Builder(RegisterActivity.this);
                    dialog.setMessage("此用户名已存在");
                    dialog.setCancelable(false);
                    dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }

                    });
                    dialog.show();
                }
                else  if (user1.equals("")){
                    AlertDialog.Builder dialog=new AlertDialog.Builder(RegisterActivity.this);
                    dialog.setMessage("账号不能为空");
                    dialog.setCancelable(false);
                    dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });
                    dialog.show();
                }
                else if (!user1.equals("")){
                    if (password0.equals("")){
                        AlertDialog.Builder dialog=new AlertDialog.Builder(RegisterActivity.this);
                        dialog.setMessage("密码不能为空");
                        dialog.setCancelable(false);
                        dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                        dialog.show();
                    }
                   else if (password0.equals(password00)&&(!password0.equals(""))) {                                       //判断两次密码是否一次
                        Toast.makeText(RegisterActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
                        User user0=new User();                                               //将账号密码存到数据库
                        user0.setUser(user1);
                        user0.setPassword(password0);
                        user0.save();
                        Intent intent=new Intent(RegisterActivity.this,LoginActivity.class);
                        startActivity(intent);
                    }
                    else {
                        AlertDialog.Builder dialog=new AlertDialog.Builder(RegisterActivity.this);
                        dialog.setMessage("两次密码不一致");
                        dialog.setCancelable(false);
                        dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                        dialog.show();
                    }

                }
            }
        });
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(RegisterActivity.this,LoginActivity.class);
                startActivity(intent);
            }
        });
    }
}

增删改查大同小异,就不一一贴了。下面这个是增加数据的活动。

 

 
/*
 *    该类为物品信息添加类,包括物品名字,件数,存放地点,存放时间,图片,以及闹钟提醒
 *    通过调用系统相册来获取图片
 */

public class AddActivity extends AppCompatActivity {
    private EditText name;
    private EditText number;
    private EditText site;
    private EditText time;
    private ImageView imageId;
    private CheckBox remind;
    private Button ok;
    private Button cancel;
    private Button add;
    public  static final int CHOOSE_PHOTO=1;
    String image_path="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        name=(EditText)findViewById(R.id.name);
        number=(EditText)findViewById(R.id.number);
        site=(EditText)findViewById(R.id.site);
        time=(EditText)findViewById(R.id.time);
       remind=(CheckBox) findViewById(R.id.remind);
        imageId=(ImageView)findViewById(R.id.imageId);
        add=(Button)findViewById(R.id.add);
        ok=(Button)findViewById(R.id.ok1);
        cancel=(Button)findViewById(R.id.cancel1);

        add.setOnClickListener(new View.OnClickListener() {
            @Override               //检查是否有权限来打开相册
            public void onClick(View v) {
                if (ContextCompat.checkSelfPermission(AddActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
                    ActivityCompat.requestPermissions(AddActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},CHOOSE_PHOTO);
                }
                else {
                    openAlbum();
                }
            }
        });

        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {                 //将输入的数据添加到数据库
                final String name1=name.getText().toString();
                String number1=number.getText().toString();
                String site1=site.getText().toString();
                String time1=time.getText().toString();
                boolean remind1=false;
                if (remind.isChecked()){
                   remind1=true;

                }
                else {
                    remind1=false;
                }

                Goods goods=new Goods(name1,number1,site1,time1,remind1,image_path);
                goods.save();
                Toast.makeText(AddActivity.this,"添加成功",Toast.LENGTH_SHORT).show();
                Intent intent2=new Intent(AddActivity.this,MainActivity.class);
                startActivity(intent2);
                }
        });
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(AddActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });
    }
    private void openAlbum(){                        //打开相册函数
        Intent intent=new Intent("android.intent.action.GET_CONTENT");
        intent.setType("image/*");
        startActivityForResult(intent,CHOOSE_PHOTO);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case CHOOSE_PHOTO:
                if (resultCode==RESULT_OK){
                    handleImage(data);
                }
                break;
            default:
                break;
        }
    }
    @Override  //调取相册时再进行判断权限
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case CHOOSE_PHOTO:
                if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
                    openAlbum();
                }
                else {
                    Toast.makeText(this,"you denied the permission",Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                break;
        }
    }
    private void handleImage(Intent data){     //传参过程 解析URi
        String imagePath=null;
        Uri uri=data.getData();
        if (DocumentsContract.isDocumentUri(this,uri)) {
            String docId = DocumentsContract.getDocumentId(uri);
            if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
                String id = docId.split(":")[1];
                String selection = MediaStore.Images.Media._ID + "=" + id;
                imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);

            } else if ("com.example.providers.downloads.documents".equals(uri.getAuthority())) {
                Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId));
                imagePath = getImagePath(contentUri, null);
            }
        }
        else if ("content".equalsIgnoreCase(uri.getScheme())){
            imagePath=getImagePath(uri,null);
        }
        else if ("file".equalsIgnoreCase(uri.getScheme())){
            imagePath=uri.getPath();
        }
        displayImage(imagePath);
        image_path=imagePath;               //将得到的图片路径已字符串的形式保存下来
    }
    private String getImagePath(Uri uri, String selection){      //获得图片的路径
        String path=null;
        Cursor cursor=getContentResolver().query(uri,null,selection,null,null);
        if (cursor!=null){
            if (cursor.moveToFirst()){
                path=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
            }
            cursor.close();
        }
        return path;
    }
    private void displayImage(String imagePath){            //显示图片
        if (imagePath!=null){
            Bitmap bitmap= BitmapFactory.decodeFile(imagePath);
            imageId.setImageBitmap(bitmap);
        }
        else {
            Toast.makeText(this,"得到图像失败",Toast.LENGTH_SHORT).show();
        }
    }
}
 
 
这个和账号密码类差不多,就只贴这一个了。
import org.litepal.crud.DataSupport;
/*
  * 该类为数据库User1中的Goods表对应的映射关系
  *      物品信息的物品类
 */
public class Goods extends DataSupport {
    private String name;
    private String imageId;
    private String number;
    private String site;
    private String time;
    private boolean remind;
    public Goods(String name, String number,String site,String time,boolean remind,String imageId){
        this.name=name;
        this.number=number;
        this.site=site;
        this.time=time;
        this.remind=remind;
        this.imageId=imageId;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }

    public String getImageId(){
        return imageId;
    }
    public void setImageId(String imageId){
        this.imageId=imageId;
    }
    public String getNumber(){
        return number;
    }
    public void setNumber(String number){
        this.number=number;
    }

    public String getSite(){
        return site;
    }
    public void setSite(String site){
        this.site=site;
    }
    public String getTime(){
        return time;
    }
    public void setTime(String time){
        this.time=time;
    }
    public boolean getRemind( ){
        return remind;
    }
    public void setRemind(boolean remind){
        this.remind=remind;
    }

    }
/*
 *    该类为物品的显示类,当点击主界面的图片时,会跳到这个界面,从而使某个物品的详细信息显示给用户
 */
public class goodsActivity extends AppCompatActivity {
    public static final String GOODS_NAME="good_name";
    public static final String GOODS_IMAGE="good_image";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_goods);
        Intent intent=getIntent();
        String goodname=intent.getStringExtra(GOODS_NAME);
        String goodImage=intent.getStringExtra(GOODS_IMAGE);
        Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
        CollapsingToolbarLayout collapsingToolbarLayout=(CollapsingToolbarLayout)findViewById(R.id.collapsing_toolbar);
        ImageView imageView=(ImageView)findViewById(R.id.good_image_view);
        TextView textView=(TextView)findViewById(R.id.good_content_text);
        ActionBar actionBar=getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        collapsingToolbarLayout.setTitle(goodname);
        Glide.with(this).load(goodImage).into(imageView);
        String goodContent=generateFruitContent(goodname);
        textView.setText(goodContent);

    }

    private String generateFruitContent(String goodname){
        StringBuilder goodContent=new StringBuilder();
        List<Goods> goods= DataSupport.where("name=?",goodname).find(Goods.class);
        if (goods.size()>0){
            goodContent.append("存放件数:"+goods.get(0).getNumber()+"\n");
            goodContent.append("存放地点:"+goods.get(0).getSite()+"\n");
            goodContent.append("存放时间:"+goods.get(0).getTime()+"\n");
            boolean is=goods.get(0).getRemind();
            if(is){
                goodContent.append("是否提醒:"+"提醒"+"\n");
            }
            else {
                goodContent.append("是否提醒:"+"不提醒");
            }

        }
        return goodContent.toString();
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case android.R.id.home:
                finish();
                break;
            case R.id.alarm_button:
                Intent intent=new Intent(goodsActivity.this,Alarm1Activity.class);
                startActivity(intent);
                break;

        }
        return  super.onOptionsItemSelected(item);
    }
    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.view1,menu);
        return true;

    }
}
/*
*   该类为适配器,使用卡片布局使他呈正方形显示给用户,以增加界面可观性,使上半部分为图片,最后一行为文字的形式显示
 */
public class goodsAdapter extends RecyclerView.Adapter<goodsAdapter.ViewHolder>{
    private Context context;
    private List<Goods> goodList;
    static class ViewHolder extends RecyclerView.ViewHolder{
        CardView cardView;
        ImageView imageView;
        TextView textView;
        public ViewHolder(View view){
            super(view);
            cardView=(CardView)view;
            imageView=(ImageView)view.findViewById(R.id.good_image);
            textView=(TextView)view.findViewById(R.id.good_name);
        }
    }
    public goodsAdapter(List<Goods> goodList){
        this.goodList =goodList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (context==null){
            context=parent.getContext();
        }
        View view= LayoutInflater.from(context).inflate(R.layout.good_item,parent,false);
        final ViewHolder holder=new ViewHolder(view);
        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position=holder.getAdapterPosition();
                Goods fruit= goodList.get(position);
                Intent intent=new Intent(context,goodsActivity.class);
                intent.putExtra(goodsActivity.GOODS_NAME,fruit.getName());
                intent.putExtra(goodsActivity.GOODS_IMAGE,fruit.getImageId());
                context.startActivity(intent);
            }
        });
        return holder;


    }
//适配器呈现结果
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Goods fruit= goodList.get(position);
        holder.textView.setText(fruit.getName());
        Glide.with(context).load(fruit.getImageId()).into(holder.imageView);
    }

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

最后是关于litepal关系映射。

 

<?xml version="1.0" encoding="utf-8" ?>
    <litepal>
    <dbname value="User1" ></dbname>
    <version value="4"></version>
    <list>
<mapping class="com.example.administrator.zhushou.User"></mapping>
<mapping class="com.example.administrator.zhushou.Goods"></mapping>
    </list>
</litepal>
关于XML的视图就不放下来了。

最后是部分截图:

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值