毕业设计|安卓毕设项目总结(二)校园订餐app

介绍框架XUI 一个简洁而又优雅的Android原生UI框架,源码地址以及作者教程如下:https://gitee.com/xuexiangjys/XUI
框架永远都是巨好用,不用设计界面,不用关注细枝末节,专注于逻辑开发便可。但是正如人生你每每追求的喜欢的往往会成为你的桎梏,框架也有它的不足,体现在开发过程中你会发现你想添加一个新功能是那么不容易,你用的很方便,这是作者所追求的,你想创新?come on老弟,有这本事我估计你不需要用这个框架。
话虽如此,XUI能满足你百分之90的需求,作为基础开发完全够用了。它提供了一整套的UI,提供了UIDemo,随用随取,美滴很。
框架将activity划分成了fragement,使控件通过fragement独立的调用,令我们的开发更加轻便。
LoginActivity.java

** * 登录页面 * * @author xuexiang * @since 2019-11-17 22:21 */ public class LoginActivity extends BaseActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); openPage(LoginFragment.class, getIntent().getExtras()); }@Override protected boolean isSupportSlideBack() {//是否支持侧滑返回 return false; }@Override protected void initStatusBarStyle() {//初始化状态栏的样式 StatusBarUtils.initStatusBarStyle(this, false, Colors.WHITE); }@Override public boolean onKeyDown(int keyCode, KeyEvent event) {//如果fragment中处理了则fragment处理否则activity处理 return KeyboardUtils.onDisableBackKeyDown(keyCode) && super.onKeyDown(keyCode, event); } }

继承了封装好的基础activity,主要业务逻辑在LoginFragment.class中。
LoginFragment.java
/** * 登录页面 * * @author xuexiang * @since 2019-11-17 22:15 */ @Page(anim = CoreAnim.none) public class LoginFragment extends BaseFragment {@BindView(R.id.log_name) MaterialEditText loginNameEt; @BindView(R.id.log_pwd) MaterialEditText loginPwdEt; //@BindView(R.id.btn_get_verify_code) //RoundButton btnGetVerifyCode; private LoginHandler mLoginsHandler = new LoginHandler(); ; private CountDownButtonHelper mCountDownHelper; @Override protected int getLayoutId() { return R.layout.fragment_login; }@Override protected TitleBar initTitle() { TitleBar titleBar = super.initTitle() .setImmersive(true); titleBar.setBackgroundColor(Color.TRANSPARENT); titleBar.setTitle(""); titleBar.setLeftImageDrawable(ResUtils.getVectorDrawable(getContext(), R.drawable.ic_login_close)); titleBar.setActionTextColor(ThemeUtils.resolveColor(getContext(), R.attr.colorAccent)); titleBar.addAction(new TitleBar.TextAction("") { @Override public void performAction(View view) { onLoginSuccess(); } }); return titleBar; }@Override protected void initViews() { //mCountDownHelper = new CountDownButtonHelper(btnGetVerifyCode, 60); //隐私政策弹窗 if (!SettingUtils.isAgreePrivacy()) { Utils.showPrivacyDialog(getContext(), (dialog, which) -> { dialog.dismiss(); SettingUtils.setIsAgreePrivacy(true); }); } }@SingleClick @OnClick({R.id.loginBtn,R.id.regTv, R.id.tv_forget_password, R.id.tv_user_protocol, R.id.tv_privacy_protocol}) public void onViewClicked(View view) { switch (view.getId()) { //case R.id.btn_get_verify_code: //if (etPhoneNumber.validate()) { //getVerifyCode(etPhoneNumber.getEditValue()); //} //break; case R.id.loginBtn: //if (loginNameEt.validate()) { //if (loginPwdEt.validate()) { loginByVerifyCode(loginNameEt.getEditValue(), loginPwdEt.getEditValue()); //} //} break; case R.id.regTv:ActivityUtils.startActivity(RegActivity.class); break; case R.id.tv_forget_password: XToastUtils.info("忘记密码"); break; case R.id.tv_user_protocol: XToastUtils.info("用户协议"); break; case R.id.tv_privacy_protocol: XToastUtils.info("隐私政策"); break; default: break; } }/** * 根据密码登录 * * @param loginNameEt 学号 * @param loginPwdEt密码 */ private void loginByVerifyCode(String loginNameEt, String loginPwdEt) {loginSys( loginNameEt,loginPwdEt); }//登录系统 public void loginSys(String loginNameEt, String loginPwdEt){ System.out.println("进入loginSys(String loginNameEt, String loginPwdEt)"); //String username = loginNameEt.getText().toString().trim(); //String pwd = loginPwdEt.getText().toString().trim(); String username =loginNameEt; String pwd = loginPwdEt; ContentValues values = new ContentValues(); values.put("uId",username); values.put("uPassword",pwd); if(TextUtils.isEmpty(username) || TextUtils.isEmpty(pwd)){ //ToastUtils.info("注册"); System.out.println("用户名和密码不能为空"); Toast.makeText(getContext(),"用户名和密码不能为空",Toast.LENGTH_SHORT).show(); }else { OkHttpClient okHttpClient = new OkHttpClient(); RequestBody requestBody = new FormBody.Builder() .add("uId", username) .add("uPassword",pwd) .build(); Request request = new Request.Builder() .url(ItFxqConstants.LOGIN_URL) .post(requestBody).build(); Call call = okHttpClient.newCall(request); // 开启异步线程访问网络 call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) throws IOException { String res = response.body().string(); Message msg = new Message(); msg.what = ItFxqConstants.OK_STATUS; msg.obj = res; mLoginsHandler.sendMessage(msg); } @Override public void onFailure(Call call, IOException e) {} }); }}class LoginHandler extends Handler { @Override public void dispatchMessage(Message msg) { super.dispatchMessage(msg); switch (msg.what) { case ItFxqConstants.OK_STATUS: //解析获取的JSON数据 Gson gson = new Gson(); //通过反射得到type对象 Type listType = new TypeToken() { }.getType(); Map resultMap = gson.fromJson((String)msg.obj, listType); Boolean isSuccess =(Boolean)resultMap.get("isSuccess"); if(isSuccess){ //存储登录用户信息 Map userMap =(Map)resultMap.get("user"); System.out.println("userMap"+userMap.toString()); CommonUtils.storeLoginUser(userMap,LoginFragment.super.getContext()); //CommonUtils.navigateTo(this.getA,HomeActivity.class); ActivityUtils.startActivity(MainActivity.class); }else{ String message = (String)resultMap.get("msg"); Toast.makeText(getContext(),message,Toast.LENGTH_SHORT).show(); } break; case ItFxqConstants.ERROR_STATUS: //Toast.makeText(LoginActivity.this,"操作失败",Toast.LENGTH_SHORT).show(); break; } } }/** * 登录成功的处理 */ private void onLoginSuccess() { //String token = RandomUtils.getRandomNumbersAndLetters(16); //if (TokenUtils.handleLoginSuccess(token)) { //popToBack(); //ActivityUtils.startActivity(MainActivity.class); //} }@Override public void onDestroyView() { if (mCountDownHelper != null) { mCountDownHelper.recycle(); } super.onDestroyView(); } }

【毕业设计|安卓毕设项目总结(二)校园订餐app】代码是将自己的代码移植到了框架中,所以有一些框架原有代码只是注释没有删掉,也许不太简洁,但注释掉的部分称得上是一个小功能,留作学习。
在XUI中控件的绑定变得很简单,通过MyBatis将控件ID和定义连接。这都归功于作者在BaseFragment中的封装。
fragment_login.xml

控件带有校验功能, 属性app:met_regexp=“正则表达式” 。相应的属性还有错误信息、最大字数限制等。
后记:前两篇都是前台的搭建,其中最为重要的当属网络请求的发送和接收。一个重要的贯穿整个项目的重点。

    推荐阅读