<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Android_data的博客]]></title><description><![CDATA[没有描述]]></description><link>https://blog.youkuaiyun.com/Android_data</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Android_data]]></copyright><item><title><![CDATA[WebSocket详解（Java后端，基于Springboot）]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/137144297</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/137144297</guid><author>Android_data</author><pubDate>Wed, 03 Apr 2024 15:12:13 +0800</pubDate><description><![CDATA[WebSocket是一种在单个TCP连接上进行全双工通信的协议。这种协议在2011年被IETF定为标准RFC 6455，并由RFC7936补充规范，同时WebSocket API也被W3C定为标准。它使得客户端和服务器之间的数据交换变得更加简单，特别是允许服务端主动向客户端推送数据。实时性更高：WebSocket技术可以实现实时通信，传输数据的延迟更低，因此可以更快地将数据传输到客户端。减少网络带宽的使用：通过建立一个持久化的连接，WebSocket减少了HTTP协议中每次请求和响应所需要的网络带宽。]]></description><category></category></item><item><title><![CDATA[Kotlin高阶函数（函数的参数）]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/137133995</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/137133995</guid><author>Android_data</author><pubDate>Fri, 29 Mar 2024 10:14:46 +0800</pubDate><description><![CDATA[Kotlin 中的高阶函数是指那些接受函数作为参数或返回函数的函数。高阶函数为 Kotlin 提供了强大的抽象能力，使我们可以将函数作为参数传递和使用。]]></description><category></category></item><item><title><![CDATA[Kotlin协程详解]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/137099723</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/137099723</guid><author>Android_data</author><pubDate>Thu, 28 Mar 2024 09:45:45 +0800</pubDate><description><![CDATA[协程的主要特点：非阻塞：协程不会导致线程停下来等待某些条件完成，而是可以在等待时挂起。轻量级：协程的调用和回调的成本很小。可以使用同步的代码来表达异步的操作。suspend：可以挂起函数的执行。resume：可以恢复挂起的函数执行。协程的优点：简化异步编程：使用协程可以避免回调地狱，使代码更易于理解和维护。提高性能：通过减少线程切换的开销，协程可以提高程序的性能。异步边界清晰：使用协程可以更好地管理异步边界，减少潜在的错误。]]></description><category></category></item><item><title><![CDATA[Java之时间减法]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/130220856</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/130220856</guid><author>Android_data</author><pubDate>Tue, 18 Apr 2023 14:28:14 +0800</pubDate><description><![CDATA[用于java编程语言做时间的减法，例如2021年10月1日减去2021年9月30日等于1天。]]></description><category></category></item><item><title><![CDATA[Android中高级成长之路—Hilt组件Java语言（一）]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/120638365</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/120638365</guid><author>Android_data</author><pubDate>Sat, 04 Jun 2022 20:39:17 +0800</pubDate><description><![CDATA[前言

在学习今天的Hilt之前，我们要先来聊聊依赖注入。那什么是依赖注入呢？先给大家举一个简单的例子：现在有两个class类，分别是A和B，在A这个类里面我们想使用B这个类里面的成员方法或者是设置B的属性值，我们通常的做法就是在A这个类里面new一个B的对象b，然后根据b这个对象去调用里面的setter方法修改里面的属性值或者是调用b的成员方法。其实我们把这种setter的形式就叫做注入，把这种创建对象的过程叫做依赖关系。常见的依赖注入分为setter注入，构造方法注入，接口注入。

那么学习Hilt依赖]]></description><category></category></item><item><title><![CDATA[记录Android的一个bug]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/116483536</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/116483536</guid><author>Android_data</author><pubDate>Fri, 07 May 2021 10:29:22 +0800</pubDate><description><![CDATA[我有一个地图类的app，在滑动地图的时候造成了程序员崩溃，关键是很诡异，没有指出哪一行出错，但就是崩溃了，崩溃日志如下


W/System.err: java.io.FileNotFoundException: /data/user/0/com.ex.shuwu/cache/optlist.ser: open failed: ENOENT (No such file or directory)
W/System.err:     at libcore.io.IoBridge.open(IoBridge.j]]></description><category></category></item><item><title><![CDATA[记录一个关于Android for arcgis的bug]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/111880442</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/111880442</guid><author>Android_data</author><pubDate>Tue, 29 Dec 2020 09:48:15 +0800</pubDate><description><![CDATA[Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve com.esri.arcgisruntime:arcgis-android:100.3.0.
Show Details
Affected Modules: app



我下载了公司的一个Android项目，其中关于arcgis的资源文件一直无法下载，最后我直接换了arcgis仓库地址就可以下载资源了。具体代码如下


mave.]]></description><category></category></item><item><title><![CDATA[关于Android UI控件高度和宽度问题]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/111467325</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/111467325</guid><author>Android_data</author><pubDate>Tue, 22 Dec 2020 11:06:35 +0800</pubDate><description><![CDATA[在实际开发中，我们很多时候都需要获取控件高度，因为不同的手机厂商设计的手机屏幕大小不一，不由得让我们去手动适配屏幕。然而网上关于获取控件高度的方法一大堆，我这个方法也不是唯一方法。

回归正题，我打算用回调的方式来实现控件的宽高，有兴趣的同学可以试试看。


public class ViewUtil {
    public static void getViewWidth(final View view, final OnViewListener onViewListener) {
        Vi]]></description><category></category></item><item><title><![CDATA[关于Android数据持久层SQLite数据库中的GreenDao和ROOM的使用]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/109576076</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/109576076</guid><author>Android_data</author><pubDate>Mon, 09 Nov 2020 14:55:06 +0800</pubDate><description><![CDATA[Android系统是目前来说，最热门的系统之一，市场份额高达70%，也就是说，十个人中间，有七个人都在使用Android系统。而数据保存，在Android的开发中显得尤其重要，Android虽然提供了一个轻量级的数据库--SQLite，但是使用起来不是很方便，特别是对于不擅长SQL语句的同学，更是一场极大的考验，从而增加了学习成本。本文将介绍两种操作数据库的第三方组件（GreenDao和Room），供大家学习和参考。]]></description><category></category></item><item><title><![CDATA[Android 中retrofit框架的简单使用--kotlin语言]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/109442867</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/109442867</guid><author>Android_data</author><pubDate>Mon, 02 Nov 2020 10:00:36 +0800</pubDate><description><![CDATA[retrofit封装了okhttp，采用注解的模式来实现网络请求，目前来说，是最好用的网络框架之一。

首先引入依赖


implementation 'com.squareup.retrofit2:retrofit:2.5.0'//Retrofit依赖
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'//可选依赖，解析json字符所用
    implementation 'com.squareup.retrofit2:con]]></description><category></category></item><item><title><![CDATA[使用kotlin语言书写listView和recyclerView,并且使用databinding实现逻辑与视图分离]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/109333852</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/109333852</guid><author>Android_data</author><pubDate>Wed, 28 Oct 2020 16:05:26 +0800</pubDate><description><![CDATA[本文章实现了listView和RecyclerView数据的修改和增加，同时运用了databinding进行数据绑定以及事件绑定

先看一张效果图



现在就贴上源码

首先在app下的build.gradle下添加相关依赖，值得注意的是databinding是添加到android代码段的


  //databinding
    dataBinding {
        enabled = true
    }

//recycleView
    implementation 'androidx.]]></description><category></category></item><item><title><![CDATA[android中的lambda表达式编程-----基于Java语言]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/109094166</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/109094166</guid><author>Android_data</author><pubDate>Thu, 15 Oct 2020 11:46:55 +0800</pubDate><description><![CDATA[Lambda表达式是基于函数的编程语言，主要作用于匿名函数，可以大大提高代码的可读性和代码的简洁程度。读音和数学上的λ相同。

在Android中的一般写法


button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"点击了but]]></description><category></category></item><item><title><![CDATA[腾讯bugly的使用，以及全局抓包配置]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/109067170</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/109067170</guid><author>Android_data</author><pubDate>Wed, 14 Oct 2020 10:44:35 +0800</pubDate><description><![CDATA[相信在座的各位同学都遇到过程序崩溃的问题，在众多代码中，排查bug是让众多开发者比较头疼的一件事。特别是一些同学刚接手别人的项目时，如果出现bug，简直是一团乱麻，无从下手，加上市面上的机型众多，Android版本不同，出现的问题也不同，所以在下推荐腾讯旗下的bugly，一款可以轻松跟踪bug的在线平台。

首先你需要申请一个bugly账号，如果项目需要上架，建议使用公司的账号注册。

我们先来配置文件到项目中去吧！由于大部分项目都需要运用其它的sdk，所以推荐自定义配置（官方也是这样的哟）

打开app下]]></description><category></category></item><item><title><![CDATA[单例模式,android编程和Java编程]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/108769279</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/108769279</guid><author>Android_data</author><pubDate>Thu, 24 Sep 2020 11:26:34 +0800</pubDate><description><![CDATA[在做Java开发过程中，常常使用设计模式会使我们的开发效率大大提高。面试中也常常会问道关于设计模式的相关问题，本文提供Java的一种设计模式《单例模式》。这种模式可用于Java后端和Android开发的一部分同学。

所谓单例模式就是在内存中只实例化一个类，对于比较耗内存的类，实例化一次，大大提高了开发的效率。单例模式一共分为两种，分别是懒汉式和饿汉式。

懒汉式：

优点：第一次调用才开始初始化，避免的内存的消耗。

缺点：必须加锁关键字才能保证线程的安全，影响效率


public class Sing]]></description><category></category></item><item><title><![CDATA[全局handler]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/108658639</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/108658639</guid><author>Android_data</author><pubDate>Fri, 18 Sep 2020 09:49:59 +0800</pubDate><description><![CDATA[全局Handler封装，优雅的书写handler的UI刷新界面

在Android开发中我们会经常使用handler进行ui界面的刷新，这主要是源于Android的线程机制和消息机制。Android不允许开发者在主线程中刷新ui界面，所以我们会经常用到消息机制，但是频繁的创建handler有可能导致内存泄漏，而且容易造成代码冗余，影响代码质量，所以我们要设置一个全局的handler，通过接口实现来实现ui刷新。

请看代码：


import android.os.Handler;
import andro]]></description><category></category></item><item><title><![CDATA[利用listView打造层级列表菜单]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/105226477</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/105226477</guid><author>Android_data</author><pubDate>Tue, 31 Mar 2020 17:05:32 +0800</pubDate><description><![CDATA[这是一个层级列表的源码，可以无限打造层级深度

1.Node类


package com.example.utils;

import java.util.ArrayList;
import java.util.List;

public class Node {
    private int id;
    private int pid= 0;             //根...]]></description><category></category></item><item><title><![CDATA[ListView系统自定义适配器（SimpleAdapter）]]></title><link>https://blog.youkuaiyun.com/Android_data/article/details/104061494</link><guid>https://blog.youkuaiyun.com/Android_data/article/details/104061494</guid><author>Android_data</author><pubDate>Tue, 21 Jan 2020 14:31:13 +0800</pubDate><description><![CDATA[listview是Android开发中最为常见的控件，也是Android开发人员必须要掌握的控件之一，本文将用系统自定义的simpleAdapter来对我们需要的布局进行一些填充和修改。现在我们先上一张效果图。





public class MainActivity extends AppCompatActivity {

    @Override
    protected void o...]]></description><category></category></item></channel></rss>