系统软件介绍
该软件是一款购买美食的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);
}
}
}