基于Android的个人健身系统(Android studio毕业设计,Android课程设计)A372

本文介绍了专注于Android和微信小程序开发的博主的实战经验,涵盖项目管理员及用户功能,如用户登录、信息管理、健身计划等。项目使用AndroidStudio开发客户端,MyEclipse2014开发后台,MySQL存储数据,依赖JDK1.7以上环境。技术栈涉及原生控件、XML布局、HTTP请求和JSON解析。文章提供了部分代码示例,包括首页信息展示和视频教程列表的实现。
摘要由CSDN通过智能技术生成

 博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;

🍅文章末尾获取源码下载方式🍅

一、项目介绍

管理员身份功能介绍:

1:用户登录:对用户信息进行管理
2:信息管理:对健康资讯,基础知识、视频教程信息进行管理

用户功能介绍:
1:注册模块,用户在使用软件前需要进行用户信息的注册
2:用户登录:用户通过自己的注册信息进行软件的登录
3:身体数据:用户可以对自己的身体数据进行管理以及分析出体制报告
4:制定每日健身计划:用户可以对健身计划进行制定
5:闹钟提醒:可以进行闹铃的设置
6:健康资讯:可以查看健康资讯信息
7:基础知识:可以查看基础知识信息
8:视频教程:可以查看视频教程信息
9:个人信息:用户可以浏览个人信息,以及对密码进行修改;

二、运行环境

1:客户端使用Android stuido进行开发;
2:服务端后台使用Myeclipse2014进行开发;
3:mysql数据库进行数据存储;
4:需要jdk1.7以上
5:使用雷电模拟器或者Androidstuio自带的模拟器进行运行

三、使用技术

总体设计逻辑和思路:
1:先设计数据库表文件
2:写服务端jsp页面以及写api接口给客户端提供数据
3:完成后台服务端的数据交互,也就是jsp页面数据的存储和显示
4:进行客户端页面的开发;
5:进行客户端对api接口的调用,也就是获取数据库的数据以及在客户端进行显示

移动端:
1:使用android原生控件以及xml布局文件来完成界面的显示
2:使用java代码完成功能的数据和逻辑交互
3:使用http网络请求完成数据的请求;
4:使用json数据解析完成客户端数据的回调和显示

服务端后台:
1:使用mysql完成数据的存储
2:使用jdbc完成数据库和代码的逻辑交互
3:使用jsp完成网页数据的显示
4:使用java代码完成api接口的编写以及以及数据的回调

四、软件截图

五、部分代码

1:首页信息


public class MainIndexFragment extends BaseFragment implements Observer {
    // 获取view
    private View rootView;
    View convertView;
    private int flagType = 1;
    private GridView mChocieType;
    private List<PlanModel> list_result = new ArrayList<PlanModel>();
    private TextView mtvTip;
    private boolean isCheck = false;
    private TextView mtvPlan;
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_index, null);
        initWidget();
        initData();
        return rootView;
    }

    @Override
    public void initWidget() {
        mtvTip = (TextView) rootView.findViewById(R.id.mtvTip);
        mChocieType = (GridView) rootView.findViewById(R.id.mChocieType);
        mtvPlan = (TextView) rootView.findViewById(R.id.mtvPlan);
    }

    @Override
    public void onClick(View v) {
    }

    @Override
    public void initData() {
        mtvTip.setText(checkBody());

         listPhoneMessage(false);

        MainIndexAdapter musicNetListAdapter = new MainIndexAdapter(getActivity(), Consts.choiceString);
        mChocieType.setAdapter(musicNetListAdapter);

        mChocieType.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

                if (position == 0) {
                    Intent intent = new Intent(getActivity(), NewsListActivity.class);
                    getActivity().startActivity(intent);
                } else if (position == 1) {
                    Intent intent = new Intent(getActivity(), MyTypeActivity.class);
                    getActivity().startActivity(intent);
                } else if (position == 2) {
                    Intent intent = new Intent(getActivity(), VideoListActivity.class);
                    getActivity().startActivity(intent);
                } else if (position == 3) {
                    Intent intent = new Intent(getActivity(), MyPlanActivity.class);
                    getActivity().startActivity(intent);
                } else if (position == 4) {
                    Intent intent = new Intent(getActivity(), FoodListActivity.class);
                    getActivity().startActivity(intent);
                } else if (position == 5) {
                    Intent intent = new Intent(getActivity(), ExameActivity.class);
                    getActivity().startActivity(intent);
                }


            }
        });
    }

    private void listPhoneMessage(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "listPlanPhoneMessage");
        params.put("planUserId", MemberUserUtils.getUid(getActivity()));
        httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
    }

    @Override
    protected void callBackSuccess(ResponseEntry entry, int actionId) {
        super.callBackSuccess(entry, actionId);

        switch (actionId) {
        case Consts.actionId.resultFlag:
            if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
                String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);

                if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
                    list_result.clear();
                    list_result = mGson.fromJson(entry.getData(), new TypeToken<List<PlanModel>>() {
                    }.getType());
                    
                    

                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");// 设置日期格式
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");// 24小时制
                    long timeChoice;
                    long nowChoice;

                    List<String> listCheck = new ArrayList<String>();

                    for (int i = 0; i < list_result.size(); i++) {

                        String timeMessage = list_result.get(i).getPlanTime();
                        try {
                            timeChoice = simpleDateFormat.parse(timeMessage).getTime();
                            nowChoice = simpleDateFormat.parse(df.format(new Date()) + "").getTime();

                            Log.i("pony_log", "courseTime:" + ((timeChoice - nowChoice) / 1000 / 60) + "");
                            long courseTime = ((timeChoice - nowChoice) / 1000 / 60);
                            if (0 < courseTime && courseTime <= 30) {
                                Log.i("pony_log", list_result.get(i).getPlanTitle());
                                listCheck.add(list_result.get(i).getPlanTitle());
                            }
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }

                    }

                    if (listCheck.size() > 0 && isCheck == false) {

                        String courseMsg = "";
                        for (int i = 0; i < listCheck.size(); i++) {
                            courseMsg = listCheck.get(i) + ","+ courseMsg ;
                        }
                        mtvPlan.setText("请注意计划:("+ courseMsg.substring(0, courseMsg.length() - 1)+")还有30分钟就要到了!");
                        isCheck = true;
                        
                        openAssetMusics();
                    }
                    
                } else {
                }
            }
            break;

        default:
            break;
        }

    }

    private String checkBody() {
        UserModel userModel = (UserModel) MemberUserUtils.getBean(getActivity(), "user_messgae");
        int heigthMsg = Integer.valueOf(userModel.getUserHeight());
        int weigthmsg = Integer.valueOf(userModel.getUserWeight());
        int bz = heigthMsg - 110;// 标准体重/kg
        if (weigthmsg <= (bz + 5) && weigthmsg >= (bz - 5)) {
            return "您的身体太棒啦,继续保持哦!";
        } else if (weigthmsg > (bz + 5)) {
            return "您有点胖,注意多运动啊!";
        } else if (weigthmsg < (bz - 5)) {
            return "您有点瘦,多吃的少熬夜!";
        }
        return "";
    }
    
    
    private MediaPlayer mediaPlayer;

    private void openAssetMusics() {

        try {
            // 播放 assets/a2.mp3 音乐文件
            AssetFileDescriptor fd = getActivity().getAssets().openFd("voice.mp3");
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
            mediaPlayer.prepare();
            mediaPlayer.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public void onPause() {
        super.onPause();
        
        if(mediaPlayer!=null){
            mediaPlayer.pause();
        }
    
    }
    
    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        UserObservable.getInstance().addObserver(MainIndexFragment.this);
    }
    
    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        UserObservable.getInstance().deleteObserver(MainIndexFragment.this);
    }

    @Override
    public void update(Observable arg0, Object arg1) {
        mtvTip.setText(checkBody());
    }

}
 

2:视频教程列表


public class VideoListActivity extends BaseActivity {

    // 标题
    private TextView mTvTitle;
    // 返回
    private ImageView mIvBack;
    private ListView mListMessage;
    private String state;
    private LinearLayout mllNomessage;
    private List<VideoOnlineModel> listMsg = new ArrayList<VideoOnlineModel>();
    private VideoListAdapter musicNetListAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listview);
        initWidget();
        initData();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.mIvBack:
            finish();
            break;
        }
    }

    @Override
    public void initWidget() {

        mllNomessage = (LinearLayout) findViewById(R.id.mllNomessage);
        mListMessage = (ListView) findViewById(R.id.mListMessage);

        mIvBack = (ImageView) findViewById(R.id.mIvBack);
        mTvTitle = (TextView) findViewById(R.id.mTvTitle);
        state = this.getIntent().getStringExtra("state");
        mTvTitle.setText("视频教程");
        mIvBack.setVisibility(View.VISIBLE);
        mIvBack.setOnClickListener(this);
    }

    @Override
    public void initData() {
        listMessage(true);

        mListMessage.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                
                Intent playMusic = new Intent(VideoListActivity.this, VideoDownloadMessageActivity.class);
                playMusic.putExtra("msg", listMsg.get(position));
                startActivity(playMusic);
            }
        });
    }

    private void listMessage(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "listVideoMessage");
        params.put("userId", MemberUserUtils.getUid(this));
        httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultCode, isShow, "正在加载...");
    }

    @Override
    protected void callBackSuccess(ResponseEntry entry, int actionId) {
        super.callBackSuccess(entry, actionId);

        switch (actionId) {
        case Consts.actionId.resultCode:
            if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
                String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);

                if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
                    listMsg = mGson.fromJson(entry.getData(), new TypeToken<List<VideoOnlineModel>>() {
                    }.getType());
                    musicNetListAdapter = new VideoListAdapter(VideoListActivity.this, listMsg);
                    mListMessage.setAdapter(musicNetListAdapter);
                } else {
                    mllNomessage.setVisibility(View.VISIBLE);
                }
            }
            break;
        }

    }

}
 

六、浏览更多Android毕业设计

毕业设计-基于android的租房信息发布平台的APP_信息发布app源码_Android毕业设计源码的博客-CSDN博客

毕业设计-基于android选课系统的设计与实现_android学生选课系统_Android毕业设计源码的博客-CSDN博客

毕业设计之校园一卡通管理系统的设计与实现_一卡通管理系统实现_Android毕业设计源码的博客-CSDN博客

基于Android的校园二手闲置物品交易系统设计与实现_基于android的二手交易平台_Android毕业设计源码的博客-CSDN博客

基于androidstudio校园快递APP系统的设计与实现_android studio论文_Android毕业设计源码的博客-CSDN博客

基于android的商城购物定制APP_安卓开发购物app_Android毕业设计源码的博客-CSDN博客

更多毕业设计可以浏览我的个人主页哦!

七、毕业设计部分免费源码分享下载

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

1:V信搜索“毕业设计小码哥”,也可以关注下方公众号,然后点击菜单栏“源码说明-源码下载”

2:点击小程序下面截图​

3:选择Android就可以看到下载源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android毕业设计源码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值