系统软件介绍

该软件是一款购买美食的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() { //调用主线程
                    @Override
                    public 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
            @Override
            public Fragment createFragment(int position) {
                return list.get(position);
            }
            @Override
            public int getItemCount() {
                return list.size();
            }
        };

        vp.setAdapter(adapter);                     //把适配器添加给ViewPager2
    }
new Thread(new Runnable() {
    @Override
    public void run() {
        activity.runOnUiThread(new Runnable() {
            @Override
            public 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() {
    @Override
    public 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() {
    @Override
    public 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() {
    @Override
    public void run() {
        activity.runOnUiThread(new Runnable() {
            @Override
            public 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() {
    @Override
    public 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() {
    @Override
    public 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 结果
     */
    @Override
    public 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);
        }
    }
}

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐