系统软件介绍

该软件是一款购买美食的app,名字叫做Cateapp,主要面向于大众群体。

具有用户注册账号和登录功能,没有登录的用户只能查看app上的展示内容,不能对食物商品进行下单

。用户登录之后可以进行对食物商品下单,下单之后可以查看下单记录。如果用户对商品有什么问页在app里边联系客服。

系统实现方案

主要使用Fragment+ViewPager2技术实现主页面的左右滑动屏幕翻页效果;

实现点击底部4个导航选项切换或加载对应的页面;实现点击底部4个选项同时导航颜色做相应变化。

然后通过RecyclerView控件,实现一些列表图片的展示及刷新。通过Intent 启动组件,在组件之间传递信息和页面转换。

通过SQLite数据库存储用户的下单信息,和通过SharedPreferences来保存注册的账号信息

。使用多线程来实现一些图片的异步刷新和启动页的停留。

源码下载:https://download.csdn.net/download/qq_44716544/17860514

或者私聊我拿

桌面图标

 代码目录

图片展示:

第二个页面,登录页,注册页

主页面:

        

联系客服

关键代码

启动页:

pActivity.this.runOnUiThread(new Runnable() { //调用主线程@Overridepublic void run() {t.setText(s[n]);        //刷新代码n++;}});try {Thread.sleep(1000);                         //暂停100毫秒if(n==3){Intent it=new Intent(StartupActivity.this,LoginActivity.class);startActivity(it);finish();}} catch (Exception e) {}}}}).start();

第二个页面,登录页

if(s.equals("")||s2.equals("")) {Toast.makeText(LoginActivity.this,"账号或密码不能为空",Toast.LENGTH_SHORT).show();}
if(s.equals(account)&&s2.equals(password)){
//    Toast.makeText(LoginActivity.this,"登录成功",Toast.LENGTH_SHORT).show();Intent i=new Intent();i.setClass(LoginActivity.this,MainActivity.class);//设置跳转的界面i.putExtra("account",s);i.putExtra("state","已登录");startActivity(i);finish();}if(!s.equals(account)||!s2.equals(password)){Toast.makeText(LoginActivity.this,"账号或密码不正确",Toast.LENGTH_SHORT).show();}

主页面

final List<Fragment> list=new ArrayList<>();list.add(new NewFragment());list.add(new ProducstFragment());list.add(new SettlementFragment());list.add(new UserFragment());vp=findViewById(R.id.viewPager);               //获得ViewPager2控件
//设置预加载的Fragment页面数量,可防止流式布局StaggeredGrid数组越界错误。vp.setOffscreenPageLimit(list.size() - 1);                                                                                                             //设置适配器FragmentStateAdapter adapter=new FragmentStateAdapter(MainActivity.this) {@NonNull@Overridepublic Fragment createFragment(int position) {return list.get(position);}@Overridepublic int getItemCount() {return list.size();}};vp.setAdapter(adapter);                     //把适配器添加给ViewPager2}
new Thread(new Runnable() {@Overridepublic void run() {activity.runOnUiThread(new Runnable() {@Overridepublic void run() {if((image.length!=0)&&(text.length!=0)){holder.iv.setImageResource(image[position]);holder.tv.setText(text[position]);}}});}
}).start();
holder.tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {String s=  holder.tv.getText().toString();//获取被点击的文字Intent i=new Intent();i.setClass(activity, NewActivity.class);//设置跳转的界面i.putExtra("name",s);// Toast.makeText(activity,s,Toast.LENGTH_SHORT).show();activity.startActivity(i);//点击左列表选项,加载对应右列表数据。//  ProducstFragment.rightrv.setAdapter(new ProductRightAdapter(activity, ProducstFragment.list.get(position)));}
});
holder.iv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {String s=  holder.tv.getText().toString();//获取被点击的文字Intent i=new Intent();i.setClass(activity, NewActivity.class);//设置跳转的界面i.putExtra("name",s);// Toast.makeText(activity,s,Toast.LENGTH_SHORT).show();activity.startActivity(i);//点击左列表选项,加载对应右列表数据。//  ProducstFragment.rightrv.setAdapter(new ProductRightAdapter(activity, ProducstFragment.list.get(position)));}
});
new Thread(new Runnable() {@Overridepublic void run() {activity.runOnUiThread(new Runnable() {@Overridepublic void run() {if((list.size()!=0)){holder.iv.setImageResource(product.getImage());holder.nametv.setText(product.getName());holder.pricetv.setText(" "+product.getPrice());}}});}
}).start();
//点击选项里的添加按钮要执行的操作
holder.bt.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//如果已选的小吃数据集合里没有该小吃if(!app.selectedproduct.contains(list.get(position))){product.setNumber(1);            //设置数量app.selectedproduct.add(product);  //添加当前选项数据到集合//添加当前选项价格到总价app.countprice +=Double.parseDouble(product.getPrice());Toast.makeText(activity,"添加成功",Toast.LENGTH_SHORT).show();}else{                              //如果已选的小吃数据集合里已有该小吃Toast.makeText(activity,"已经有了",Toast.LENGTH_SHORT).show();}}
});

新品页面

 Intent intent=getIntent();String name=intent.getStringExtra("name");//获取菜名for(int i=0;i<text.length;i++){if(text[i].equals(name)){position=i;break;}}// Toast.makeText(NewActivity.this,text.length,Toast.LENGTH_SHORT).show();ImageView foodimage=findViewById(R.id.foodimage);foodimage.setImageResource(image[position]);//设置食物图片TextView  foodid=findViewById(R.id.foodid);foodid.setText(text[position]);foodname=findViewById(R.id.foodname);foodname.setText(text2[position]);
}
Button buttonorder=findViewById(R.id.buttonorder);
buttonorder.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {app = (AppData) NewActivity.this.getApplication();              //获得全局类if (app.check.equals("已登录")) {if (num >= 1) {String pricesum2 = Integer.toString(pricesum);//获取菜名,价格,数量,并添加的集合里。Product product = new Product();product.setImage(image[position]);product.setName(text[position]);product.setPrice(pricesum2);product.setNumber(num);app.countprice = pricesum;app.selectedproduct.add(product);  //添加当前选项数据到集合Toast.makeText(NewActivity.this, "下单成功", Toast.LENGTH_SHORT).show();// save();} else {Toast.makeText(NewActivity.this, "你还没有选择数量", Toast.LENGTH_SHORT).show();}} else {Toast.makeText(NewActivity.this, "你还没有登录,请先登录", Toast.LENGTH_SHORT).show();}}
});

购买记录页面

app = (AppData) RecordActivity.this.getApplication();              //获得全局类//  Toast.makeText(RecordActivity.this, app.account+"message", Toast.LENGTH_SHORT).show();
MyHelper helper=new MyHelper(RecordActivity.this,app.account+".db",null,1);SQLiteDatabase  db=helper.getReadableDatabase();Cursor cursor=db.query("information",null,null,null,null,null,null);if(cursor.getCount()!=0){while (cursor.moveToNext()){String _id = cursor.getString(cursor.getColumnIndex("_id"));String image = cursor.getString(cursor.getColumnIndex("image"));String name = cursor.getString(cursor.getColumnIndex("name"));String price = cursor.getString(cursor.getColumnIndex("price"));String time1 = cursor.getString(cursor.getColumnIndex("time1"));name2[num]=name;image2[num]=image;price2[num]=price;time2[num]=time1;num++;//   Toast.makeText(RecordActivity.this, app.account+"message"+message[0], Toast.LENGTH_SHORT).show();}cursor.close();}

联系客服页面

* 判断是否有某项权限* @param string_permission 权限* @param request_code 请求码* @return*/public boolean checkReadPermission(String string_permission,int request_code) {boolean flag = false;if (ContextCompat.checkSelfPermission(getActivity(), string_permission) == PackageManager.PERMISSION_GRANTED) {//已有权限flag = true;} else {//申请权限ActivityCompat.requestPermissions(getActivity(), new String[]{string_permission}, request_code);}return flag;}/*** 检查权限后的回调* @param requestCode 请求码* @param permissions  权限* @param grantResults 结果*/@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case REQUEST_CALL_PERMISSION: //拨打电话if (permissions.length != 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {//失败Toast.makeText(getActivity(),"请允许拨号权限后再试",Toast.LENGTH_SHORT).show();} else {//成功call("tel:"+"10086");}break;}}/*** 拨打电话(直接拨打)* @param telPhone 电话*/public void call(String telPhone){if(checkReadPermission(Manifest.permission.CALL_PHONE,REQUEST_CALL_PERMISSION)){Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(telPhone));startActivity(intent);}}
}

Android开发一个美食app相关推荐

  1. 自己怎么开发一个软件app、如何开发一个app系统软件?

    自己怎么开发一个软件app.如何开发一个app系统软件? ​华盛恒辉开发app软件的办法如下: 1.华盛恒辉首先本人明白需求,懂代码,熟习开发流程. 2.华盛恒辉APP开发后期需求理解产品定位. 3. ...

  2. android开发 一个更优的listView的写法

    android开发 一个更优的listView的写法 布局xml <?xml version="1.0" encoding="utf-8"?> &l ...

  3. 用android开发一个识别人形的app,一键切换背景

    前言:我是小松,今年大四,在android开发中持续耕耘,快来一起学习把 不知道大家有没有这种烦恼,手上有白底的证件照,但是学校偏偏要交红底的,万般无奈只能去照相馆再照,虽说可以进行PS,但是总归麻烦 ...

  4. android实现过程,Android:一个完整app开发流程

    一.给出功能文档 二.APP架构选择 可选MVP,MVVM 三.APP目录结构设置 本app基于mvp架构.除了mvp架构的文件. 还包含下面的文件夹: ui (下面根据Activity划分) wid ...

  5. Android开发规范:APP版本发布(全量发布、灰度发布)

    我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 全量发布 灰度发布 欢迎加入Android开发交流QQ群: app ...

  6. 基于Android开发的天气预报app(源码下载)

    基于AndroidStudio环境开发的天气app 由于需要源码的人特别多,我特地花时间新增了对最新IDE版本Android Studio Chipmunk | 2021.2.1 Patch 1的支持 ...

  7. 【开源项目】Android开发内置App自动升级

    1.准备工作,首先需要在AndroidManifest.xml中的application中加入以下内容 <providerandroid:name="android.support.v ...

  8. 人工智能离前端并不远 一步步教你开发一个机器学习APP(附源码)

    最近HBO电视网推出的美剧<硅谷Silicon Valley>席卷全球,里面有一个桥段介绍了超级有趣的iOS app- Not Hotdog.你甚至可以在APP Store上下载到它. 受 ...

  9. android 所有运行程序闪退,Android开发,运行app闪退的解决方法

    满意答案 lawlovefat 2015.03.09 采纳率:52%    等级:12 已帮助:8866人 Andro开发解决5.0安装成功后打开直接闪退问题,andro5.0 这阵子在开发一个app ...

最新文章

  1. git搜索--grep
  2. C篇(一) 用Codeblocks建立一个C的工程
  3. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)--转
  4. Kali 渗透测试—Metasploit
  5. 牛客多校2 - Greater and Greater(bitset优化暴力)
  6. lpv4的地址格式由多少个字节组成_我们为什么有这么多字符编码格式?
  7. Flink on Zeppelin (1) - 入门篇
  8. 7-31 查验身份证 (15 分)
  9. UnixBench 测试工具简单使用
  10. AFNetworking 2.0 来了
  11. java浏览器无数据,JAVA实现文件下载,浏览器端失去数据没反应
  12. [算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
  13. m4s格式转换mp3_amr转换mp3格式文件
  14. 技术博客|第13期:Server Side Logging:Hulu推荐系统中的特征漂移问题解决方法
  15. matlab小船渡河物理模型,【物理】小船渡河模型及关联速度问题
  16. 自然保护区相关矢量数据下载
  17. Error:java: 读取xxx.jar时出错; zip file is empty
  18. margin属性的正负值确定
  19. 联通数据能力开放平台介绍
  20. 5GNR漫谈11:PRACH随机接入信道(1)

热门文章

  1. 一个公司存在不同职位,不同职位计算工资的方法也不相同。工资可能是固定的,也可能根据销售额或工作量来计算。假设公司有三种职务:经理、计件工人和计时工人:他们的工资组成分别为:
  2. 解决最近easyui官网不能访问问题
  3. vue中使用keep-alive来优化网页性能
  4. Android项目实战之高仿网易云音乐项目介绍
  5. Python代码对英语标点后面缺空格的情况自动补空格
  6. Qt5设置应用程序图标
  7. 解决java获取系统时间差8个小时 专题
  8. 苹果5更新系统无服务器,苹果5手机系统更新不了出现无法检查更新怎么处理
  9. 一日一签免费算卦_一日一签app免费算卦
  10. html tr隐藏 边框存在,CSS 设置tr的边框