Android开发一个美食app

Android开发一个美食app

系统软件介绍

该软件是一款购买美食的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 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

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);

}

}

}

你可能也喜欢

looli洛丽包包怎样?属于什么等级包包?
be365是否安全

looli洛丽包包怎样?属于什么等级包包?

📅 08-05 👀 907
在 Outlook 中创建电子邮件
365bet365娱乐场

在 Outlook 中创建电子邮件

📅 09-27 👀 430
揭秘古风美男,AJ品牌背后的文化内涵与市场魅力
小肚子不舒服 警惕这5种疾病来袭!
be365是否安全

小肚子不舒服 警惕这5种疾病来袭!

📅 08-04 👀 8081
AOV(传说对决)对应王者荣耀英雄汇总,持续更新(目前更新至2020-02-20)
京东试用入口在哪?京东免费申请试用品在哪里
365bet365娱乐场

京东试用入口在哪?京东免费申请试用品在哪里

📅 07-10 👀 3012
【湖北】荆门电信宽带办理安装 荆门宽带套餐资费价格表
三星HM1900( SAMSUNG HM1900 )
be365是否安全

三星HM1900( SAMSUNG HM1900 )

📅 07-31 👀 9014
ff14弓箭手行会在哪
365bet官方投注网站

ff14弓箭手行会在哪

📅 09-20 👀 1645