/* *    该类为主界面,通过侧滑,划出侧滑菜单,里面有制作人的信息,添加,查找,删除功能。*    主界面为白色,每三个物品信息为一行的卡片式布局呈现给用户,通过点击图片查看具体信息*/
public class MainActivity extends AppCompatActivity {private DrawerLayout drawerLayout;private List<Goods> goodsList =new ArrayList<>();private goodsAdapter adapter;@Overrideprotected 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(){@Overridepublic 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);}}@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();}}}});register.setOnClickListener(new View.OnClickListener() {@Overridepublic 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为重复的密码,用于进一步确认*/@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();}}}});cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic 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="";@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic 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);}@Overrideprotected 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){     //传参过程 解析URiString 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";@Overrideprotected 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();}@Overridepublic 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;}@Overridepublic 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() {@Overridepublic 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;}
//适配器呈现结果@Overridepublic 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);}@Overridepublic 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的视图就不放下来了。

最后是部分截图:

android本地备忘录助手相关推荐

  1. Android版xx助手之天天酷跑外挂详细分析

    Android版xx助手之天天酷跑外挂详细分析 图/文      莫灰灰 背景 近些年来,移动互联网的大肆崛起,潜移默化中影响着人们的生活和工作习惯.当腾讯的微信平台接入手机游戏之后,移动端的游戏也开 ...

  2. Android版xx助手之天天酷跑外挂具体分析

    Android版xx助手之天天酷跑外挂具体分析 图/文      莫灰灰 背景 近些年来,移动互联网的大肆崛起,潜移默化中影响着人们的生活和工作习惯.当腾讯的微信平台接入手机游戏之后,移动端的游戏也開 ...

  3. 浅入浅出 Android 安全:第三章 Android 本地用户空间层安全

    第三章 Android 本地用户空间层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 本地用户空间层在 Android ...

  4. Android 从 Android 本地图库选择多个图片

    原文地址 本文说明如何从 Android 本地图库选择多个图片.作者考虑很多解决方案. 演示从 Android 本地图库选择多个图片,有两个方法可以实现从图库中选择多个图片: 用 Intent 获取多 ...

  5. 实现在Android本地视频播放器开发

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

  6. Android远程桌面助手(B1391)

    ARDC(B1391), Download:https://files.cnblogs.com/files/we-hjb/ARDC%28B1391%29_EN.7z Android远程桌面助手(B13 ...

  7. Android本地视频播放器开发--视频解码

    在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...

  8. CVE-2014-7911 Android本地提权漏洞分析与利用

    概述 前面我们了解了Android Binder机制的基本原理,当然仅仅了解是不够的,我们要做到:Know it and hack it.这篇文章我们就来分析一个和Binder相关的漏洞:CVE-20 ...

  9. Android 本地tomcat服务器接收处理手机上传的数据之案例演示

    上一篇:Android 本地tomcat服务器接收处理手机上传的数据之环境搭建     本篇基于上一篇搭建的服务器端环境,具体介绍Android真机上传数据到tomcat服务器的交互过程   场景:A ...

最新文章

  1. oracle相关操作
  2. mysql在电脑哪里启动项_所有电脑和主板开机选择启动项的快捷键
  3. Specification排序orderby
  4. 基于Tacotron汉语语音合成的开源实践
  5. 手机安全卫士——进程管理
  6. ArcEngine对Blob字段赋值的方法
  7. SAP C4C Adapt menu debugging
  8. 自定义按键_雷柏VT300S号称吃鸡鼠标,能够自定义10个编程按键
  9. mysql的limit、order by和group by的用法
  10. redux异步action_react-redux--异步Action
  11. Oracle故障:Breaking the connection before proto/dty negotiation, error raised 3136
  12. [20141216]sqlplus的set appinfo.txt
  13. python输入半径计算球的体积公式_编写程序:根据输入的球的半径,分别计算球的表面积、体积输出计算结果。...
  14. linux mud 游戏,150919神奇的mud
  15. matlab求最大公倍数_matlab求最大公约数和最小公倍数
  16. RSA整理--频谱路由分配算法
  17. 神奇!一张图测试你是用左脑还是右脑! (含控制方法揭秘)
  18. 国内某公司员工贩卖客户信息,造成10万余条信息泄露
  19. 智慧校园三维可视化决策系统平台(数字孪生)-解决方案开发案例
  20. 搭建一个简易的医疗导诊系统

热门文章

  1. 人人都能开发物联网(一.目标)
  2. 旺宏指控东芝闪存专利侵权 或影响东芝出售半导体事业
  3. 2021-08-09校网比赛D题
  4. Solidworks2019导入Step/IGS文件不能编辑打开子装配体和零件
  5. java 使用mediainfo_音视频文件编码分析软件MediaInfo使用简介
  6. 七、 下一代互联网IPV6
  7. LICEcap – 灵活好用,GIF 屏幕录制工具
  8. CSS font 字体设置
  9. Iterator遍历
  10. 虚拟机和主机相互ping不通方法总结