ButterKnife 加载控件 + xUtils 获取数据+ Fresco 显示图片 + 通过事件分发控制移动 + 通过AIDL获取数据

SpringBoot+Vue+Mysql社区医院信息平台(源码+文档) SpringBoot+Vue+Mysql学生宿舍信息管理系统 WEB端软件项目(源码+文档) 项目包含:①完整源码(后端+管理后台+用户前台);②数据库脚本文件;③万字论文文档;④开题报告;⑤答辩PPT;⑥项目运行视频教程。 项目架构: B/S 架构、MVC 分层设计 技术栈: Java、MySQL、SpringBoot、MyBatis-Plus、Token 权限校验、管理后台 Vue+ElementUI+ECharts、用户前台 Layui+jQuery、Maven 构建。 一、角色设计 学生用户: 注册登录、浏览宿舍信息、查询宿舍安排、在线报修、缴费查询、失物招领、桶装水预订、评论交流、收藏等。 商家用户: 注册登录、桶装水品牌与商品信息维护、预订订单查看与处理。 维修人员: 注册登录、查看待处理报修、接单维修、填写报修处理结果与进度反馈。 管理员: 学生管理、班级管理、宿舍信息管理、宿舍安排管理、报修处理管理、缴费信息管理、卫生检查与文明宿舍管理、失物招领管理、桶装水与商家管理、维修人员管理、公告资讯与轮播图管理等。 二、前台功能模块(学生端) 1. 首页展示:轮播图、宿舍公告、最新动态推荐、常用服务快速入口 2. 宿舍信息模块:宿舍列表、楼栋与房间条件筛选、宿舍详情查看、我的宿舍安排查询 3. 在线报修模块:在线提交宿舍设施报修申请、上传故障描述、查看报修进度与维修处理结果 4. 缴费模块:水电等缴费记录查询、缴费状态查看 5. 卫生检查与文明宿舍:宿舍卫生检查结果公示、文明宿舍展示 6. 失物招领模块:失物信息发布、招领信息发布、详情查看、评论互动 7. 桶装水预订:桶装水品牌与商品浏览、在线预订、我的预订记录查询 8. 假期留宿:假期留校申请提交、申请记录查询 9. 评论与收藏:信息评论、查看他人评论、评论回复互动、收藏感兴趣的内容 10. 个人中心... 立即下载

一, 导入jar包

      xUtils.jar  +  gson.jar


二, 添加依赖

compile 'com.jakewharton:butterknife:8.8.1'
compile 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.facebook.fresco:fresco:1.5.0'

三, MyApp.java

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //初始化Fresco
        Fresco.initialize(this);

        //初始化xUtils
        x.Ext.init(this);
        x.Ext.setDebug(true);
    }
}

   四, 清单文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="bw.com.week2_test">

        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

        <application
            android:name=".MyApp"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">

五, 页面

    activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scroll_view_id"
    tools:context="bw.com.week2_test.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <ListView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="1000dp"
            android:id="@+id/lv_id_01"/>

        <ListView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:id="@+id/lv_id_02"/>

        <ListView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:id="@+id/lv_id_03"/>
    </LinearLayout>
</ScrollView>

item_rv.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp">

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="100dp"
        android:layout_height="100dp"
        fresco:placeholderImage="@mipmap/ic_launcher"
        android:id="@+id/sdv_id"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title_id"
        android:text="标题"
        android:textSize="24sp"
        android:layout_marginTop="50dp"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@id/sdv_id"
        />
</RelativeLayout>


六, MainActivity.java

    

/**
 * 1, ButterKnife 加载控件
 * 2, 通过xUtils 获取数据, Fresco 显示图片
 * 3, 通过事件分发, 左侧控制左侧的移动, 右侧控制右侧的移动, 中间控制一起的移
 * 4, 点击 每个条目, 通过aidl 获取服务端返回的数据  -- 两个app , Servier -- App
 */
public class MainActivity extends AppCompatActivity {

    //TODO 初始化控件
    @BindView(value = R.id.lv_id_01)
    ListView mLv1;
    @BindView(value = R.id.lv_id_02)
    ListView mLv2;
    @BindView(value = R.id.lv_id_03)
    ListView mLv3;
    @BindView(value = R.id.scroll_view_id)
    ScrollView mScrollView;

    private Unbinder unbinder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       //TODO 绑定ButterKnife
        unbinder = ButterKnife.bind(this);


        //TODO xUtils 获取网络数据
        RequestParams params = new RequestParams("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1");
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String s) {

                //TODO 解析数据, 获取的数据源
                Qubaobei qubaobei = new Gson().fromJson(s,Qubaobei.class);
                List<Qubaobei.DataBean> dataBean = qubaobei.getData();

                //TODO 初始化适配器
                MyAdapter adapter = new MyAdapter(getApplicationContext(),dataBean);
                mLv1.setAdapter(adapter);

                //TODO 设置其余的RecycleView
                mLv2.setAdapter(adapter);
                mLv3.setAdapter(adapter);

            }
            @Override
            public void onError(Throwable throwable, boolean b) {
            }
            @Override
            public void onCancelled(CancelledException e) {
            }
            @Override
            public void onFinished() {
            }
        });

        //TODO -----设置事件的处理
        mLv1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //如果RecyclerView 触摸事件监听器中, 事件如果抬起的状态 --则让ScrollView 来处理事件
                if(event.getAction() == MotionEvent.ACTION_DOWN)
                {
                    //否则, 让RecyclerView来处理
                    mScrollView.requestDisallowInterceptTouchEvent(true);//不消费
                }
                return false;
            }
        });

        mLv2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_DOWN)
                {
                    //否则, 让RecyclerView来处理
                    mScrollView.requestDisallowInterceptTouchEvent(false);//消费
                }
                return false;
            }
        });

        mLv3.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //如果RecyclerView 触摸事件监听器中, 事件如果抬起的状态 --则让ScrollView 来处理事件
                if(event.getAction() == MotionEvent.ACTION_DOWN)
                {
                    //否则, 让RecyclerView来处理
                    mScrollView.requestDisallowInterceptTouchEvent(true);//不消费
                }
                return false;
            }
        });

        //TODO 点击条目, 显示AIDL 返回的数据
        mLv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                try {
                    //TODO 获取AIDL 返回的数据
                    String str = myAidl.getInfo();
                    Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });
        mLv2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                try {
                    //TODO 获取AIDL 返回的数据
                    String str = myAidl.getInfo();
                    Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });
        mLv3.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                try {
                    //TODO 获取AIDL 返回的数据
                    String str = myAidl.getInfo();
                    Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        //解绑ButterKnife
        unbinder.unbind();
    }

    //TODO ---------------AIDL 实现--------
    private MyAidl myAidl;
    private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myAidl = MyAidl.Stub.asInterface(service);
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
    };
    //TODO 绑定服务
    @Override
    protected void onStart() {
        super.onStart();
        Intent intent = new Intent("com.bw.aidl");
        intent.setPackage("bw.com.server");
        bindService(intent,connection,BIND_AUTO_CREATE);
    }
    //TODO 解绑服务
    @Override
    protected void onStop() {
        super.onStop();
        unbindService(connection);
    }



}

七, MyAdapter.java

public class MyAdapter extends BaseAdapter{
    private List<Qubaobei.DataBean> data;
    private Context context;

    public MyAdapter(Context context,List<Qubaobei.DataBean> data)
    {
        this.data = data;
        this.context = context;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder viewHolder;

        if(convertView==null)
        {
            convertView = LayoutInflater.from(context).inflate(R.layout.item_rv,parent,false);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }else
        {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        //TODO Fresco 获取图片
        Uri uri = Uri.parse(data.get(position).getPic());
        viewHolder.sdv.setImageURI(uri);

        viewHolder.titleTv.setText(data.get(position).getTitle());

        return convertView;
    }

    class ViewHolder
    {
        @BindView(value = R.id.sdv_id)
        SimpleDraweeView sdv;

        @BindView(value = R.id.title_id)
        TextView titleTv;

        public ViewHolder(View itemView) {
            //TODO 绑定ButterKnife
            ButterKnife.bind(this,itemView);
        }
    }
}

八, Qubaobei.java   - - GsonFormant 生成的实体类

九, 复制服务端的src/main 目录中的aidl文件夹  -- 然后编译

十, 服务器端

        1, 在src /main 目录下创建 aidl 文件 

        MyAidl.aidl

package bw.com.server;

interface MyAidl {

    String getInfo();
}

       

  2,  编译生成同名的的.java 文件  -- MyAidl.java


 3,  定义 MyService.java 类

        

public class MyService extends Service {

    private MyAidl.Stub stub = new MyAidl.Stub() {
        @Override
        public String getInfo() throws RemoteException {
            return "AIDL 返回的数据";
        }
    };

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return stub;
    }
}

4,在服务器的清单文件夹中, 注册Service

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="bw.com.server">

    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true" android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!--注册Service-->
        <service android:name=".MyService">
            <intent-filter>
                <action android:name="com.bw.aidl"/>
            </intent-filter>
        </service>
    </application>

</manifest>


十一,  运行的时候, 先运行Service ,  然后在运行App


YOLOv8作物病害检测实战源码 这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。 立即下载

相关推荐

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

GSON的使用以及GsonFormat工具的安装

添加gson依赖 Gson gson = new Gson();   添加GSON 格式化工具 到此 Gson格式化工具已经安装完成 使用 json输入或者粘贴进输入框 点击右上角的Format 可以自动格式化 点击ok 会自动生成如下代码 package com.lanyu96.mvpdemo.Demo02; public class...

lanyu96 8874

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

gsonformat安装怎么使用_GSON的使用以及GsonFormat工具的安装

添加gson依赖Gson gson = new Gson();添加GSON 格式化工具 到此 Gson格式化工具已经安装完成使用json输入或者粘贴进输入框 点击右上角的Format 可以自动格式化 点击ok 会自动生成如下代码package com.lanyu96.mvpdemo.Demo02;public class material {/*** bosType : 557E499F...

weixin_39724266的博客 233

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

IntelliJ IDEA 通过GsonFormat插件将JSONObject格式的String 解析成实体

GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高。 插件地址:https://plugins.jetbrains.com/idea/plugin/7654-gsonformat 这个教程主要是学习IntelliJ IDEA 如何通过GsonFormat插件将JSONObject格...

anzhenji7632的博客 1401

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

插件GsonFormat快速实现JavaBean

写在前面的话,本文章只适合使用AndroidStudio的小伙伴观看,还在纠结eclipse的小伙伴赶紧洗洗睡吧。。。 最近看见一篇快速实现javaBean的屎丢丢插件,这是一个根据JSONObject格式的字符串,自动生成实体类参数。 如果想要使用这个插件,有两个方法可供选择。 安装方法 方法一: 1.Android studio File->Settings..->Plugins–

Dakaring的专栏 2万+

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何构建标准化、模块化的智能服务工具?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ButterKnife 加载控件 + xUtils 获取数据+ Fresco 显示图片 + 通过事件分发控制移动 + 通过AIDL获取数据

一, 导入jar包      xUtils.jar  +  gson.jar二, 添加依赖compile 'com.jakewharton:butterknife:8.8.1' compile 'com.jakewharton:butterknife-compiler:8.8.1' compile 'com.android.support:recyclerview-v7:25.3.1' compi...

xiuxiu_861223的博客 400

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

产业园区运营负责人如何利用平台实现企业创新需求的精准分析与服务推送?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

PSIM-三相维也纳VIENNA整流器电压电流双闭环+中点电位平衡SVPWM控制仿真

内容概要:本文档详细介绍了一种基于PSIM软件实现的三相维也纳(VIENNA)整流器仿真模型,重点实现了电压电流双闭环控制与中点电位平衡的SVPWM调制策略。该仿真系统通过精确的控制算法有效提升了整流器的功率因数,降低了输入电流谐波含量,并解决了三电平拓扑中常见的直流侧中点电位偏移问题,具有较高的工程实用价值,适用于高效率、高功率密度的电力电子系统设计与科研验证。文档还整合了丰富的配套资源,涵盖多种电力电子变换器拓扑结构、先进控制算法及典型应用场景,形成了系统化的技术资料体系,有助于深入理解现代整流技术的核心原理与发展动态。; 适合人群:面向从事电力电子、电气工程、新能源变换系统等领域的科研人员、高校研究生以及具备一定仿真基础的工程技术人员。; 使用场景及目标:①深入研究三相VIENNA整流器的工作机理与控制特性;②掌握电压外环、电流内环双闭环控制结构的设计方法;③理解并实现SVPWM调制技术与中点电位平衡控制策略的协同作用;④开展相关控制算法的仿真验证、性能优化与实验对比,为高性能整流装置的研发提供理论支撑和技术原型。; 阅读建议:建议结合文中列出的其他仿真案例(如PWM整流器、LLC谐振变换器、DAB变换器等)进行横向对比学习,充分利用所提供的PSIM、MATLAB/Simulink等多平台仿真资源,重点关注控制逻辑与主电路的耦合关系,通过参数调试与波形分析深化对系统动态响应和稳态性能的理解,强化“理论—建模—仿真—优化”的闭环研究能力。

产业园区运营负责人如何利用数智工具提升园区企业的技术对接效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员在推动成果转化落地过程中,如何实现科技成果的高效推介与价值评估?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ICD10 openGauss版

ICD10 openGauss版

上一篇: ndk 开发
下一篇: 使用Frasco将一个图片设置成圆角
wind_Cill
博客等级 码龄9年 4粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值