Android开发电商系统过程(仿“拼多多”)

平夕夕开发

效果图

页面

Dialog页面

  • 设置页面标题

getActivity().setTitle(“设置标题”)

登录

登录处理:使用了LoginViewModel进行字符长度判断。

通过过滤器进行传值

fragment所在的activity都作用于一个activity中,一个intent对应可以对应多个fragment

  • 通过startActivity来跳转页面
  • 通过SDK中自带的LoginActivity来写登录页面 (要在SDK Manager -> SDK Tools 中安装 emulator SDK )
  • LoginActivity.java LoginViewModel.java
  • 完美的解决了关于Android开发 中mysql使用遇到的问题!!!
  • 登录中的图标 是drawableLeft
  • 通过一个进度条跳转到主页

问题:

​ 注意到ip地址的变化,会导致连接数据库超时(一直卡在那里不动)

​ 要将ip改为一个固定的ip地址

​ 没网络也会导致无法访问到服务器数据库

网络编程:具体实现

  • 先通过调用api借口使用
implementation 'org.xutils:xutils:3.3.40'
  • 再初始化
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
        //x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
    }
  • 再编写访问的地址
public String selectuser="http://39.108.61.227:80/json/su.php";
  • 获取服务器数据
public void getData(){
	RequestParams params = new RequestParams(url);
	x.http().get(params,new Callback.CacheCallback<String>()	{
		@Override
		public void onSuccess(String result){
		Log.i("CommentFragment", result);
                list = JSON.parseObject(result,
                        new TypeReference<List<HashMap<String, Object>>>() {
                        });
                mData.clear();
                mData.addAll(list);
                adapter.notifyDataSetChanged();
		}
		@Override
		public void onError(Throwable ex, boolean isOnCallback){
		
		}
		@Override
		public void onCancelled(CancelledException cex){
		
		}
		
		@Override
		public void onFinshed(){
		
		}
		@Override
		public boolean onCache(String result){
			return false;
		}
	
	});
}

评论页面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e4WBFNqq-1641134602673)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211212214609778.png)]

修改样式和主题顶部文字

通过getActivity().setTitle()修改内容

图片头像的形状,通过自定义的CircleImageView来改变,其中组件中的图片要通过src的形式添加。

android:src="@drawable/i3"

首页主要内容


顶部导航栏

  • 1.搜索框
  • 2.提交按钮

中间内容顶部导航栏

  • 不同类别的内容

  • 通过点击触发切换

  • 推荐

    • 一个网格布局

    • 一个横向lineLayout

    • 一个横向

    • 一个瀑布流数据(实验10)

    • E/RecyclerView: No adapter attached; skipping layout

    • Log.i("RecycleViewFragment", result);  //有解析数据 返回
      list = JSON.parseObject(result,
              new TypeReference<List<HashMap<String, Object>>>() {
              
              
              });
      

      出现数据转换问题,不返回值,也不继续往下执行

      • 解决方法:坚持onBindViewHolder中所写代码的准确性

      • Glide.with(getActivity()).load(new MyApplication().imagebaseurl + mData.get(position).get("picture").toString()).placeholder(R.mipmap.ic_launcher).into(holder.img);
        

        get(“picture”) 与 数据库中字段名对应 picture。

  • 食品

  • 水果

    • 通过recyclerView来进行嵌套gridlayout
    • 一个单独的xml文件,recycler.xml
    • 通过适配器的方式来进行配置
    • 通过getData()去获取到bind视图绑定的数据
  • 百货

  • 手机

  • 电脑

以上页面

​ 公用一个内容来显示数据

问题:

​ Duplicate resources

  • 名字相同的错误,修改名字

当加入轮播图后,无法加载页面


中间内容

  • 数据库中的数据 通过python爬虫去爬取数据,并将数据等写入python脚本中

  • 自动操作数据库

  • 最终将数据库上传到自己搭建的服务器当中(阿里云服务器)

  • 配置mysql操作文件

    • mysql的连接 数据库名 和 表名要区分开来
    • mysql中的用户连接 服务器ip 要写对 要访问到数据
      • 访问数据问题
      • 高版本无法访问到数据(自己搭的服务器)
  • 运用滚动条来查看商品信息

  • 瀑布流显示所有商品


底部导航栏

实现

MainActivity.java R.id.nav_host_fragment-- > activity_main.xml fragment

-> fragment (id为nav_host_fragment) -> navigation/mobile_navigation ->nav_home

-> fragment_home.xml -> BottomNavigationView bottom_nav_menu -> fragment_home.xml

fragment navigation/mobile_navigation2 -> mobile_navigation2.xml -> 页面导航fragment

  • 1.首页

    • 定位到导航上
  • 2.直播

    • 通过下载 cn.jzvd:jiaozivideoplayer:7.7.0依赖实现播放视频

    • getItemCount() 返回值记得设置为mData.size()
      
  • 3.分类

    • 运用verticalTabLayout + YViewPager来实现侧边栏的效果

    • implementation 'q.rorbin:VerticalTabLayout:1.2.5'
      
  • 4.聊天

    • 运用recycleview实现滑动效果显示商家信息
  • 5.个人中心

    • 实现
    • 如果数据提交上去,但是数据库没有进行更新操作,需要检查php中的数据库编写的代码是否正确。
    • 数据库机制:有一个错误的字段,就所有字段不提交。

整体布局:

​ 通过activity_main.xml进行布局,给一个容器(navigation)

​ 容器中设置起始fragment,通过起始fragment设置viewpage来左右控制页面切换,

​ 起始fragment中在设置底部导航栏,通过BottomNavigationView,在给一个容器来存放fragment

​ 再在第二个容器中设置显示页面,这个页面就是一打开就看到的页面。就是viewpage页面

问题:

​ 如果出现tablayout中tab中的button无法点击,多半是recycleviewfragment.xml文件布局的问题

​ 通过对照viewpage.xml中的文件和recyclefragment.xml文件中的布局来改变。最终可以实现点击

​ (例如marin-top的高度等,不能让recycleviewfragment.xml文件中的嵌套在viewpage的tab上,或者遮挡住了tab的button)

​ 底部导航栏的移位问题,出现有中文无法显示出来。

修改bottomnavigationview中的属性,

添加app:labelVisibilityMode=“labeled”

这样就显示全了文字信息

BottomNavigationView 的使用及遇到的坑 - 简书 (jianshu.com)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iz9eMwBM-1641134602676)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211213174253966.png)]

CoordinatorLayout出现顶部空白

  • 解决办法,删除配置中的 android:fitsSystemWindows=“true”

解决RecycleView底部内容被遮挡(bottomNavigationView)

Android跳过的那些坑:ConstraintLayout中,ViewPager与BottomNavigationView 遮挡 问题解决方案,增加三句话搞定_thtfcccj的博客-CSDN博客


生命周期 activity.xml -> graph.xml -> fragment_home.xml

Navigation 项目

activity.xml 中 navhostfragment nav_graph(id -> fragment容器 app:navGraph="@navigation/navigation")

HomeFragment home_fragment.xml Constrainlayout button

DetailFragment detail_fragment.xml Constrainlayout button

Navigation navigation (地图) 添加fragment graph

MainActivity.java

​ NavigationController navController = Navigation.findNavController(this,R.id.fragment);

​ NavigationUI.setupActionBarWithNavController(this,navController);

HomeFragment.java

​ NavigationController navController = Navigation.findNavController(this,R.id.button);

​ navController.navigate(R.id…)

ViewPager 不能同时在一个页面出现(为什么? )还没有解决

fragment跳转通过Intent通信跳转

activity不能直接跳到fragment

先通过一个activity再跳到fragment

改变为:

​ 一个activity 对应 一个fragment

最终为:

​ 两个activity ,在第二个activity中运用navigatie 去控制fragment,从home_fragement开始

​ 无法实现底部导航栏的点击事件,所以最终改变了。与实验不同在于,实验是BottonNavigationView,而我的是LinerLayout,实现效果不一样

最终版为 5 个 activity对应 5 个fragment

并且在当前的fragment不能跳到属于自己的fragment

​ 解决方法:

  • 底部导航条的实现
    • bottom_menu.xml 文件实现底部导航栏个单项

内容

Paging使用

网络+数据库

DiffUtil -> pagedList Adapter -> onBindViewHolder -> pagedList ->DataSource

  • mainfests 允许网络访问
  • 布局文件

build.gradle

  • 数据在UserViewModel
  • Room

修改商品操作

  • 通过点击商品进入到商品详情页,通过点击修改和删除来改变商品。

  • 修改商品,先获取到商品的基本信息:名称,描述,生产日期,图片

  • 问题:

    • 修改图片并进行保存,上传到服务器中,出现问题
      • 1.修改服务器的php代码,将update.php中basename(xxx)返回的文件名与ip地址进行拼接操作
      • 2.得到完整的图片地址,进行写入数据库,将数据库中picture的字段大小设置大一些,防止写入不完整。
      • php中的字符串拼接操作是使用字符串连接符.和赋值运算符.=
  • 解决成功

聊天页面显示

Android问题:android.graphics.drawable.TransitionDrawable cannot be cast to android.graph

通过设置Glide.with(context).load(url).asBitmap().into(img);解决

关于recycleview滑动到底部不彻底

完美解决BottomNavigationView使用过程中遮盖其他控件无法显示的问题 - 简书 (jianshu.com)

如何优雅地使用BottomNavigationView实现底部导航栏+fragment切换效果 - 简书 (jianshu.com)

关于BottomNavigationView的使用,出现移位问题
able.TransitionDrawable cannot be cast to android.graph

通过设置Glide.with(context).load(url).asBitmap().into(img);解决

关于recycleview滑动到底部不彻底

完美解决BottomNavigationView使用过程中遮盖其他控件无法显示的问题 - 简书 (jianshu.com)

如何优雅地使用BottomNavigationView实现底部导航栏+fragment切换效果 - 简书 (jianshu.com)

关于BottomNavigationView的使用,出现移位问题

猜你喜欢

转载自blog.csdn.net/weixin_48469177/article/details/122282158