- 博客(39)
- 收藏
- 关注
原创 AAAhome--api文档
saveWishById用于为特定用户添加一项愿望单信息举例:saveWishById/12&100&200含义:为userId为12的用户添加一条愿望单信息,游戏id为100,期望价格为200返回值:JSON字符串,字段有mark和info的字符串,如果mark为1则存储成功,为0则失败,info表示错误原因。getById根据gameId获取游戏价格等简略信息举例:getById/100含义:获取gameId为100的游戏简略信息返回值:JSON...
2022-03-11 10:43:37
3933
原创 ViewModel
viewModel是实现mvvm架构的重要组件,主要用于解决两个问题,一是减轻Actiyity/Fragment的负担,在传统的架构下Activity需要承担ui展示刷新,逻辑处理和网络回调等等任务,随着项目复杂会变得难以维护,可以用viewModel存放与界面有关的数据和网络请求等等。二是解决横竖屏旋转时Activity重新调用onCreate()方法,会丢失掉原本数据的问题。解决第二个问题的原因是一个ViewModel的生命周期要比它所绑定的Activity长,重新创建的Activity所获得的Vi
2022-02-16 16:56:59
1536
原创 Mybatis使用
导包 <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency>
2022-01-08 18:04:13
646
原创 Android网络编程之文件上传/下载
这个任务是安卓课程的作业,任务分为两部分,一是搭建web服务器编写相应的处理逻辑,二是安卓客户端发送和接受相应的报文。下载整体思路是先读取要传输的文件,随后以缓冲流的形式写在相应的http报文实体体也就是正文中,接收方将报文以缓冲流读取出来,写在相应的文件位置。先写web服务器,这里为了避免写一堆配置文档直接用spring boot框架。这个Controller注解作用是标记这是一个控制器类,框架中的分发处理器会扫描带有该注解的类标记其为控制器,这里的控制器就和安卓的模型视图控制器模
2021-11-15 20:01:50
1943
原创 爬虫实战项目
豆瓣TOP250电影听说所有爬虫学习都是从这开始的?import requestsimport refrom bs4 import BeautifulSoupheader = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30',
2021-10-24 15:08:35
1890
原创 正则表达式
re库的三种正则匹配方式match方法从起始位置匹配search方法扫描整个文本返回第一个findall方法扫描整个,以列表的形式返回全部匹配结果
2021-10-24 10:10:27
70
原创 Android--Notification
Android8.0之后,为了解决app为了提高曝光量不断发送垃圾通知的情况,Google为安卓引入了通知渠道的概念,每一条通知都要属于一个对应的渠道,而不同渠道的通知控制权在用户手中。简单通知演示protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
2021-10-21 15:39:40
111
原创 安卓发起HTTP请求
HTTPURLConnectionpublic class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewBy
2021-10-21 15:39:20
1869
1
原创 WebView套壳浏览器实现
初版方法,直接向webView传入uri加载网页。public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //
2021-10-21 15:39:04
755
原创 Service
Service绑定活动public class MainActivity extends AppCompatActivity implements View.OnClickListener{ Service1.DownloadBinder binder; private ServiceConnection connection=new ServiceConnection() { @Override public void onServiceConnect
2021-10-18 14:18:40
53
原创 安卓播放音乐视频
播放音频public class MainActivity extends AppCompatActivity implements View.OnClickListener { MediaPlayer mediaPlayer=new MediaPlayer();; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
2021-10-16 21:37:03
658
原创 调用摄像机和读取相册
调用摄像机因为应用读写存储属于危险操作需要申请权限,因此拍摄图片缓存放在应用关联缓存目录下,调用get方法即可获得。随后根据版本状况将File对象转化为Uri对象,放入Intent的参数中,随后调用startActivityForResult方法,在回调方法中刷新ImageView即可。protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
2021-10-15 12:45:32
635
原创 Kotlin特性
空安全为了避免Java工程中常出现的NPE,kotlin通过在IDE的提示帮助下避免对null对象的调用,虽然可以通过NonNull注解来实现这个功能,但是Kotlin提供了语言级别的支持,声明一个非抽象的属性时候必须给它赋予一个非空值。但是这样做也会产生诸多不便之处,kotlin也提供了解决方案。lateinit如果第一时间无法给变量赋值,但是确定在调用其之前可以为其赋值,声明之前加上这个关键字即可。但是这样仍然不能赋予其值为null,并且必须指定类型,并且类型不能为基本类型。不能指定
2021-10-13 22:56:31
378
原创 Android异步消息机制
Java多线程https://blog.csdn.net/qq_45923275/article/details/119295978?spm=1001.2014.3001.5502 更新ui的操作推荐交给创建这个ui的原始线程来操作,原因是如果给ui加锁保证它的线程安全性,会降低访问效率,而在线程不安全的ui中通过多个线程进行操作会出现不可控的情况。 安卓推荐使用Handler来实现异步处理,从而规避线程不安全的问题。...
2021-10-07 15:35:02
147
原创 ContentResolver
通过ContentResolver可以访问其他应用程序提供的数据接口,获得这个内容提供器调用Context(Activity的究极父类)的getContentResolver方法。之后就能进行CRUD操作了。private void read() { ContentResolver resolver = getContentResolver(); //核心操作,第一个参数是uri,这里使用Phone APP封装好的 Cursor cursor = res
2021-10-03 18:11:38
202
原创 Android权限
在Android6.0以前的版本中 ,应用所需的授权信息会在安装时候要求用户授予,这种情况会造成店大欺客的现象,比如微信申请了一大堆权限,作为用户根本不可能拒绝安装,只好乖乖上缴权限,这样对用户的隐私是非常不利的。 不过在之后的系统中安卓开发团队加入了运行时权限的功能,将权限分成了危险权限和普通权限,危险权限必须在使用时申请,经过用户同意才能继续使用,在Android中共有11组30个危险权限,同组权限是一体的。其余的权限则是普通权限,系统会自动授予。 ...
2021-10-03 14:36:52
136
原创 安卓持久化技术之SQLite
SQLLite是安卓系统内置的数据库,支持标准的SQL语法和ACID事务原则,具有占据内存小,运算速度快的优点。SQLiteOpenHelper通过SQLiteOpenHelper类可以对数据库进行管理,它是一个抽象类,需要重写OnCreate和OnUpgrade方法来实现数据库的创建升级逻辑。通过getReadableDatabase和getWritableDatabase方法来获取数据库可读写的对象,两者区别在于存储空间满了的时候前者会返回只读数据库,后者则会报错。第一次创建数据库的时候会调
2021-10-02 16:37:40
189
原创 安卓持久化技术之SharedPerferences
通过SharedPerferences对象可以以键值对的方式,将数据存储于xml文件中。获取SharedPerferences对象的方式有三种,一是通过这个活动自己的getPreferences方法获得,这样会将存储文件默认命名为活动的名字,第二是通过Context的getSharedPerferences来获得,第三个通过PerferenceManager类的静态函数来获得。//获取文本内容并且存储它 EditText editText=findViewById(R.id.edi
2021-10-01 15:50:13
131
原创 安卓持久化技术之文件存储
通过将数据写入文件可以实现持久化,原理是通过Android提供的openFileOutput和openFileInput方法获取输入输出流,然后利用IO方法写入数据。这里通过保存EditView中的数据到文件中,实现下次调用该活动的onCreate方法时重现数据。public class MainActivity extends AppCompatActivity { EditText editText; //获取文件中的数据,逻辑很简单,IO操作一如既往的烦 privat
2021-09-30 17:36:25
145
原创 广播Broadcasts
动态注册先吐槽一波,写在代码里面比起xml明明更不容易修改却叫动态注册,挺离谱的就。先示范怎么接受系统广播,在这里是接受网络变化的广播,具体在注释里面仔细看看。public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkReceiver networkReceiver; @Override protected voi
2021-09-26 19:10:02
95
原创 自定义控件
引入布局首先自定义布局title:之后在主活动中引入title,并且在加载主活动布局时候隐藏默认标题栏:创建自定义控件以上面的title布局为例子,每次使用都要给按钮写相同的逻辑,会出现大量的代码重复,解决方法就是将title做成自定义控件进行使用。...
2021-09-19 18:01:13
76
原创 常用控件和布局
Button默认情况下不能通过background属性改变按钮颜色,需要在res/values/themes.xml改为这样(后面加个.Bridge)EditText使用hint属性指定未输入时提示,使用maxLines规定最大行数。ImageView可以在逻辑中通过setImageResource方法重新指定图片资源。ProgressBar控件的visibility属性用来控制可见性,有三个值:1.visiable可见的2.invisible存在不可见3.go.
2021-09-17 15:35:57
260
原创 Activity生命周期
活动回收问题当一个活动执行力onStop方法停止运行进入后台时,如果系统的内存不足就可能对此Activity回收操作,如果用户在该活动写入了数据就会丢失,解决方法是通过Bundle传递保存的内容。活动被摧毁前会执行onSaveInstanceState方法,可以通过键值对的形式将信息保存到传入的Bundle中。在活动的onCreat方法参数中就有Bundle,如果该被回收前通过onSaveInstanceState方法存入数据的话,这个参数就会保存之前存入的所有数据。活动的启动模式..
2021-09-16 16:24:19
52
原创 Activity操作
Generate(生成) a Layout File生成默认布局文件Launcher Activity 设置为主活动通过setContentView方法来设置该活动的布局文件设置Layout根元素为LinearLayout,在布局中添加一个按钮取名button_2在androidManifest中注册该活动为主活动设置这个button的响应事件---提示hello。Intent...
2021-09-15 10:53:15
126
原创 原型 模式
//原型模式,通过clone方法复制实例而不是new 实例类名()创建。interface Product extends Cloneable{ void use(String str); Product createClone(); /* 实现该接口的两个类一个采用了clone方法进行浅克隆,另一个采用序列化深克隆, 浅克隆是将被复制的实例字段值直接复制到了新的实例中 字段值是地址的话,会复制地址而不是创建新的对象,例如字段值是一个Map,则新旧实.
2021-09-04 15:34:07
53
原创 策略 模式
策略模式就是替换实现的算法或者策略,比如根据传入的用户描述接口,来决定进行怎样的折扣。再比如sort函数,传入的是基本数据类型就进行快速排序,是引用类型就归并排序
2021-09-04 10:26:31
52
原创 单例 模式
设计一个售票机单例类,getNextTicketNumber方法会返回1000,1001,1002.....的数列饿汉式public class TicketMaker { static TicketMaker ticketMaker=new TicketMaker(); //饿汉式,类加载阶段即生成了单例实例,浪费了内存 //优点是线程安全,并且不用上锁 int ticket=1000; private TicketMaker(){} pub.
2021-09-03 20:53:53
149
原创 代理模式(静态,动态)
GoF中的代理模式 代理模式。JoinPoint,PointCut,advice等AOP基础只是查看spring揭秘的143页。静态代理的缺点在静态代理中,即便joinpoint相同,但是由于,目标对象的类型不同,也需要定义多个相应的代理对象,例如要给多个功能增加限制晚间访问的横织逻辑,我们依旧要为每个功能写出相应代理类,由此增添了许多重复的逻辑,如果有成百上千的功能,就要写成百上千的代理类,给维护和扩展带来了极大的不方便。动态代理即是为了解决上述问题而诞生的,首先看一下Jav...
2021-08-28 18:04:16
82
原创 IOC原理
BeanWrapper比较反射和通过beanWrapper设置bean属性通过反射public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{ Class<?> Clazz = Class.forName("IOC_User"); IOC_User ioc_user=(IOC_U
2021-08-27 11:18:22
52
原创 工厂方法模式和FactoryBean
IOC容器支持工厂方法模式降低接口和实现类的耦合可以通过工厂方法模式,Spring的IOC容器提供了通过工厂方法模式创建实例的支持。静态工厂方法当工厂类获取实例的方法为静态时,可以在将工厂注册bean的Factory-method属性值设置为静态方法名字。<bean id="factoryBean" class="FactoryBean" factory-method="getInstance"/>public class FactoryBean { public
2021-08-25 15:41:12
175
原创 Spring-IOC
创建bean的方式无参构造 <bean id="hello" class="HelloSpring"> <property name="name" value="helloworld"></property> </bean>有参构造<!--第一种下标构建--> <bean id="user1" class="IOC_User"> <constructor-a
2021-08-25 11:02:57
61
原创 8.22周赛
第一道白给,第二道考调api,第三道dp,没想出来咋dp贪心过了一半样例,遂放弃求最大公约数最小公倍数辗转相除法两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。 //a>b public static int max(int a,int b){ int temp; while(b!=0){ temp=a%b; a=b; b.
2021-08-22 17:06:29
60
原创 JavaBean
JavaBean指实体类,主要用于映射关系型数据库表,遵守下面四个构建规范1.属性私有2.属性拥有公开对应的get和set方法3.拥有一个无参构造函数4.实现序列化接口在于关系型数据库的映射关系中:表单对应实体类元组对应实体类对象属性对应实体类的属性...
2021-08-06 10:40:44
76
原创 Java线程池
Executor接口EExecutor接口提供了执行方法,在Executor实例中传入任务实例(Runnable函数式接口中只有一个run方法表示要执行的事),就会新建线程执行任务,或是加入等待队列,或者拒绝执行抛出RejectedExecutionException。ThreadPoolExecutor实现类ThreadPoolExecutor类是Java中线程池Executor的具体实现类,它的构造函数最多有七个参数,先解析一下:int corePoolSiz 线程池核心线程.
2021-08-04 11:07:21
46
原创 Java锁解析
乐观锁和悲观锁这两种锁是面对并发情况下加锁的两种策略,并非是指特定的锁乐观锁取数据的时候不会对数据上锁,更新数据时候则会检查这个数据是否被别的线程修改,修改过则重新读取直到更新成功或者线程放弃操作CAS策略(Compare-and-Swap),更新数据前先进行比较旧值是否发生了变化,如果是则更新为新数据,否则什么都不做重新循环悲观锁取数据的时候就会对数据上锁阻止别的线程取数据sychronized锁流程sychronized锁的升级过程是偏向锁->轻量级锁->重量
2021-08-02 10:37:19
67
原创 多线程入门篇
创建线程的三种方式继承Thread类,重写run方法Thread类中有字段target为Runnable接口的实例,run方法不经过重写会默认执行target的run方法。重写后调用该类的start方法即可交给JVM创建一个新的线程执行run中的指令这种方法的优点是写着简单缺点是Java没有多继承,继承Thread就不能继承其他类,灵活性低实现Runnable接口Runnable是一个函数式接口,只有一个抽象方法run实现Runnable接口和run方法后可以创建一.
2021-08-01 11:50:36
168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人