自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (5)
  • 收藏
  • 关注

原创 JetPack之Lifecycle

为什么要使用Lifecycle?如果在Activity或者Fragment生命周期中做了很多操作,代码看起来特别多,Activity或者Fragment看起来特别的臃肿,为了解决这样的代码臃肿,Lifecycle把这些生命周期的操作拿了出来,新建了一个类去维护生命周期里的逻辑。首先看一下代码的具体实现本地的依赖dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementat

2020-12-31 11:41:02 171

原创 Android 引起内存泄漏的几种情况

概述内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会提示你Out of memory。首先使用leakcanary来检测内存泄漏debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'使用当前版本的leakcanary无需install直接可以使用(下一篇文章.

2020-12-11 18:01:38 6306 3

原创 Android IPC的几种方式

IPC全称为Inter-Process Communication,含义为进程间通信,指的是两个进程之间进行数据交换的过程。方式一:Bundle实现 用于android四大组件直接的进程间通信应用一的Activitypublic class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.o

2020-11-17 17:04:29 5160 5

转载 Android各版本迭代改动与适配集合!

前言今天分享的面试题是:Android在版本迭代中,总会进行很多改动,那么你熟知各版本都改动了什么内容?又要怎么适配呢?Android4.4发布ART虚拟机,提供选项可以开启。 HttpURLConnection的底层实现改为了OkHttp。Android5.0ART成为默认虚拟机,完全代替Dalvik虚拟机。 Context.bindService()方法需要显式 Intent,如果提供隐式 intent,将引发异常。Android6.0增加运行时权限限制如果你的应用使.

2021-03-17 15:37:37 286

转载 JetPack之ViewModel

什么是ViewModel在说ViewModel前,我们需要解一下MVVM和DataBinding,在Android进阶三部曲第一部《Android进阶之光》中,我简单介绍了下MVVM和DataBinding。MVVM最早于2005年被微软的架构师John Gossman提出,在2015年Google I/O大会上发布了MVVM的支持库DataBinding,DataBinding遭到了一些开发者的诟病,主要是绑定数据时如果出现问题会很难排查,这样就没有一个合适的ViewModel规范来帮助开发者来实现M

2021-01-04 15:26:06 294

转载 JetPack之LiveData

什么是LiveDataLiveData如同它的名字一样,是一个可观察的数据持有者,和常规的observable不同,LiveData是具有生命周期感知的,这意味着它能够在Activity、Fragment、Service中正确的处理生命周期。LiveData的数据源一般是ViewModel,也可以是其它可以更新LiveData的组件。当数据更新后,LiveData 就会通知它的所有观察者,比如Activiy。与RxJava的方法不同的是,LiveData并不是通知所有观察者,它 只会通知处于Activ

2021-01-04 14:46:59 209

原创 异常 Program type already present: android.support.v4.app.INotificationSideChannel$Stub$Proxy

当前环境:apply plugin: 'com.android.application'android { compileSdkVersion 29 defaultConfig { applicationId "com.wanzi.designmode" minSdkVersion 16 targetSdkVersion 29 versionCode 1 versionName "1.0"

2020-12-30 15:36:00 1430

转载 Android Jetpack架构组件(一)带你了解Android Jetpack

前言Android已经发展了11年,可以说是比较成熟的技术了,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库请求,数据解析等等。后来出现了一些框架来帮助开发者快速进行开发,比如XUtils、Volley、OKHttp、EventBus等,随着框架越来越多,一个应用可以有多种技术选型,直接导致应用开发越来越不规范,导致做出来的应用质量参差不齐,这显然不是谷歌想看到的。谷歌随后推出了MVP和MVVM相关的官方例子,效果很一般,而且覆盖面只是在架构上,Goole I/O 201

2020-12-25 15:13:07 141

原创 LeakCanary(2.0版本之前)的使用及其原理

概述leakcanary是一个监测android和java内存泄漏的工具。他能够在不影响程序正常运行的情况下,动态收集程序存在的内存泄漏问题。大体流程Activity Destory之后将它放在一个WeakReference 这个WeakReference关联到一个ReferenceQueue 查看ReferenceQueue是否存在Activity的引用 如果该Activity泄漏了,Dump出heap信息,然后再去分析泄漏路径。引用类型强引用(StrongReferenc

2020-12-15 14:36:54 581

原创 JAVA知识点—垃圾回收机制GC

概述垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。()内存泄露:ML (Memory Leak),程序在向系统申请分配内存空间后(new),在使用完毕后未释放。结果导致一直占据该内存单元,我们和程序都无法再使用该内存单元,直到程序结束,这是内存泄露。内存溢出:OOM(Out of Memory),程序向系统申请的内存空间超出了系统能给的。比如内存只能分配一

2020-12-08 14:14:48 485

原创 JAVA知识点—JVM的工作原理和类加载机制

JVM工作流程开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。运行时数据区区域 说明 程序计数器 每条线程都需要有一个程序计数器,计数器记录的是正在执行的指令地址,如果正在执行的是N...

2020-12-04 14:27:46 109

转载 Binder(初始篇)

红茶一杯话Binder(初始篇)1 什么是Binder? 简单地说,Binder是Android平台上的一种跨进程交互技术。该技术最早并不是由Google公司提出的,它的前身是Be Inc公司开发的OpenBinder,而且在Palm中也有应用。后来OpenBinder的作者Dianne Hackborn加入了Google公司,并负责Android平台的开发工作,所以把这项技术也带进了Android。 我们知道,在Android的应用层次上,基本...

2020-12-01 16:04:07 227

原创 设计模式之观察者模式

概述在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者

2020-11-26 14:43:46 147

原创 设计模式之模板方法模式

概述在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。这样的例子在生活中还有很多,例如,一个人每天会起床、吃

2020-11-26 14:13:33 106

原创 设计模式之策略模式

概述在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。如果

2020-11-26 11:41:38 94

原创 设计模式之享元模式

概述:在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提取出来共享,则能节省大量的系统资源,这就是享元模式的产生背景。(转自:http://c.biancheng.net/view/1371.html)定义使用共享对象有效地支持大量细粒度的对象

2020-11-25 14:17:23 126

原创 设计模式之外观模式

概述在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。定义要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。此模式提供一个高层的

2020-11-25 10:18:11 91

原创 设计模式之装饰模式

概述在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现。定义:动态地给一个对象添加一些额外的职责,就添加功能来说,装饰模式比生成子类更为灵活。举个栗子杨过本身就会全真剑法,有两位武学前辈洪七公和欧阳锋分别向杨过传授过打狗棒法和蛤蟆功,这样杨过除了会全真剑法,还会打狗棒法和蛤蟆功。洪

2020-11-24 15:10:05 72

原创 设计模式之代理模式

概述在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。定义:为其他对象提供一种代理以控制对这个对象的访问举个栗子

2020-11-24 14:08:32 133

原创 设计模式之建造者模式

概述建造者模式也被称为生产器模式,它是创建一个复杂对象的创建型模式,其将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。举个栗子我们需要购买一台计算机,首先要求整改计算机的CPU,主板,或者其他部件都是什么牌子的,什么样的配置,根据自己的需求来变化。但是这些部件组装成计算的过程是一样的,我们无需知道这些部件是怎么组装的,我们只需要提供相关部件的牌子和配置就可以了。对于这种就可以采用建造者模式,将部件和组装过程分离。使得构建过程和部件都可以自由扩展,两者之间的耦合也降到最低。

2020-11-24 11:26:40 98

原创 设计模式之工厂模式

概述工厂,就是生产产品的地方。在Java设计模式中使用工厂的概念,那就是生成对象的地方了。本来直接就能创建的对象为何要增加一个工厂类呢?这就需要了解工厂方法要解决的是什么问题了,如果只有一个类,我们直接new一个对象完事,这是最简单的;但是如果有多个类呢,而且这些类还需要针对不同的情况来创建不同的对象,这时候就需要工厂了,我们可以在工厂中根据条件来创建具体的对象。这样一来就将调用方和具体的目标类进行了解耦,调用方根本就不知道需要创建那个对象,它只是提出了条件,然后工厂就可以根据给定的条件来决定创建哪

2020-11-24 10:10:42 102

原创 设计模式之单例模式

为什么需要设计模式?帮助我们应对不断的变化,新的变化对已有代码已有架构的影响尽可能的小。针对变化,不需要重复的修改已有代码去适应变化。每次只需要对增量编译、测试、部署。----------管理变化,提高复用(转自https://blog.csdn.net/sinat_22991367/article/details/86756484)定义:保证一个类仅有一个实例。并提供一个访问它的全局访问点。单例模式有多种写法并且其各有利弊饿汉式模式public class Singleton{

2020-11-23 15:41:34 96

原创 时间复杂度和空间复杂度分析

时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。Big O notation (时间复杂度)O(1):Constant Complexity 常数复杂度 比如运算了1,2,3,4...n次 常数次O(log (n)):Logarithmic Complexity 对数复杂度O(n):Linear Complexity 线性时间复杂度 比如运算了n,2n,3n次O...

2020-11-06 14:07:48 288

原创 Glide源码分析

直接进入主题当前使用的glide版本为3.7.0正常请求加载图片代码如下: String url = "http://www.baidu.com"; Glide.with(getApplicationContext()) //指定Content .load(url) //指定图片的url .placeholder(R.mipmap.ic_launcher)//指定图片未成功加载前的默认图片 .error(R.mipmap

2020-10-21 16:55:45 268

原创 OKHttp3源码解析(四)OKHttp的拦截器

继OKHttp3源码解析(一)同步请求的源码分析继OKHttp3源码解析(二)同步请求的源码分析继OKHttp3源码解析(三)OKHttp的任务调度Dispatcher什么是拦截器拦截器是OKHttp中提供一种强大机制,它可以实现网络监听,请求以及响应重写,请求失败重试等功能当你发送一个请求的时候,OKHttp它会通过拦截器的链来执行Http请求,首先介绍OKHttp常用的拦截器RetryAndFollowUpinterceptor 重试和失败重定向拦截器,主要做的是初始化的工..

2020-10-12 16:04:45 569

原创 OKHttp3源码解析(三)OKHttp的任务调度Dispatcher

继OKHttp3源码解析(一)同步请求的源码分析继OKHttp3源码解析(二)同步请求的源码分析什么是dispatcher?dispatcher的作用是维护同步和异步的请求状态,并且内部维护一个线程池,用于执行相应的请求。okHttp如何实现同步异步请求?发送的同步/异步请求都会在dispatcher中管理其状态接下来看一下dispatcher源码看一下同步请求dispather.execute()是如何实现的synchronized void executed(RealC

2020-09-18 14:57:08 273

原创 OKHttp3源码解析(二)异步请求的源码分析

继OKHttp3源码解析(一)同步请求的源码分析​OkHttpClient okHttpClient = new OkHttpClient.Builder().build();//创建单例Request request = new Request.Builder()//创建请求 .url("http://www.baidu.com") .build();Call call = okHttpClient.newCall(request);call.enqueue(n

2020-09-18 11:12:29 239

原创 OKHttp3源码解析(一)同步请求的源码分析

OKHTTP是什么?百度一搜:”一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso)用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient,现在已经打不出来)”正常的Http协议OKHTTP的开发同步请求OkHttpClient okHttpClient = new OkHttpClient.Builder().build();//.

2020-09-17 15:01:35 358

原创 总结篇:蓝牙开发

开发维护蓝牙项目已经18个月了,在此做一下总结蓝牙的开发流程先以原生的芯片为例,直接通过BluetoothAdapterenable()打开蓝牙 → startDiscovery()开始搜索→ 通过广播接收(action:BluetoothDevice.ACTION_FOUND)找到设备 →getName()获取本地蓝牙名称→getAddress()获取本地蓝牙地址→开始createBond配对→成功之后连接蓝牙 之后就可以正常使用蓝牙功能(蓝牙电话,蓝牙音乐)一般大公司开发都会有提供蓝牙芯..

2020-09-14 16:02:21 2172

原创 Android启动过程(三)ActivityManagerService----2

Android启动过程(三)ActivityManagerService----1继续上一篇Step3@startActivityLocked(1),如果此时还没有找到合适的目标Activity来处理Intent,或者这个目标的ActivityInfo为空,都说明这个Intent 没有办法继续处理了,因此程序会直接报错返回。Step4@startActivityLocked(1),上面的判断通过后,还需要检查调用者是否有权限来启动指定的Activity。具体如下所示/frameworks/ba.

2020-09-09 10:33:08 275

原创 Android启动过程(三)ActivityManagerService----1

首先AMS是什么?ActivityManagerService (AMS)是Android提供的一个用于管理Activity(和其他组件)运行状态的系统流程,也是我们编写APK应用程序时使用最频繁的一个系统服务。AMS功能概述首先对AMS的功能进程整体概述,从而为后面分析其内部实现打下基础。ActivityStack理解了AMS所需完成的功能后,我们会深入代码层来讲解它们的实现--其中最重要的两个核心就是ActivityStack和ActivityTask。从名称可以看出,Activ

2020-09-08 10:29:20 339

原创 Android启动过程(二)SystemServer

SystemServer -----Android 的“系统服务”SystemServer 是Android进入Launcher前的最后的准备。由名称就可以看出来,它提供了众多由java语言编写的“系统服务”。由上一篇文章可知,一旦我们在init.rc中为Zyogte指定了启动参数--start-system-server,那么ZygoteInit就会调用startSystemServer来进入SystemServer。而且系统服务又分别分为Java层和本地层两类。其中Native层服务的实现体现在

2020-09-04 14:22:14 252

原创 Android启动过程(一)

安卓架构图(转自:https://www.jianshu.com/p/657336b545bd)loader>kernel>native>framework>app作为安卓的第一个进程init(pid =1),init将通过解析init.rc来陆续启动其他关键服务进程(ServiceManager,Zygote和SystemServer)如果你本地看不了源码的话,可以通过在线查看源码(https://www.androidos.net.cn/android/5

2020-09-03 16:39:41 823

原创 AndroidStudio 的Profiler+Mat检测内存泄漏

什么是内存泄漏申请了一块内存空间,但是一直没有释放。如果不断的申请还会引起内存溢出(OOM)什么是内存抖动频繁的GC操作,如果垃圾回收的速度没有生成的快,也会引起OOM如何检测?我使用的是Profiler+Mat,前提是必须要ADB调试MAT工具下载地址(https://www.eclipse.org/mat/)运行完Profiler会出现点击MEMORY部分点击下载 开始记录生成右键Heap Dump导出文件然后将该文件通过sd.

2020-08-10 11:23:18 562 1

原创 简单的自定义注解

注解是什么?注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释;元注解一共有四种:@Retention,@Target,@Inherited,@Documented个人理解元注解就是注解之上还有注解为什么要使用注解?每当你创建描述符性质的类和接口的时,一旦其中包含重复性工作,就可以考虑简化与自动化该过程。如果你.

2020-07-30 17:03:23 333

原创 AsyncTask实现原理

轻量级异步类,是个抽象类处理异步消息有很多方式,为何存在AsyncTask?第一点,UI线程不能进行过多的耗时操作,容易引起ANR第二点,只能在UI线程中去更新UI第三点,AsyncTask封装了 Handler+Runnable,方便使用代码实现MyAsyncTask mTask = new MyAsyncTask();mTask.execute();class MyAsyncTask extends AsyncTask<String,Integer,Str..

2020-07-21 17:26:10 202

原创 5.1源码解析Handler

为什么要使用Handler将工作线程需操作UI的消息 传递 到主线程,使得主线程可根据工作线程的需求 更新UI,从而避免线程操作不安全的问题首先正常Handler写法1,创建Handler对象private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case: ..

2020-07-21 13:57:23 225

原创 AIDL客户端与服务端数据传输

全称:Android Interface Definition Language(Android接口定义语言)实现功能:想要实现一个夸进程,从app1向app2请求数据,并且app2收到请求回调给app1首先建立服务端建立aidl文件 IMyService.aidlpackage com.example.shenwchneusoftcom.testaidlone;import com.example.shenwchneusoftcom.testaidlone.Product;i..

2020-07-08 14:38:36 1574 2

原创 积累第三方SDK

xCrashxCrash 能为安卓 APP 提供捕获 java 崩溃,native 崩溃和 ANR 的能力。不需要 root 权限或任何系统权限。开源地址:https://github.com/iqiyi/xCrash转自:https://www.jianshu.com/p/937d52297046

2020-06-29 15:05:20 185

原创 遇见的异常以及处理

SharedPreferences最后一次写入断电不保存问题记录https://blog.csdn.net/qq_36476119/article/details/105832937

2020-06-22 10:09:00 192

SequencePlugin-1.3.0.zip

生成简单序列图。 单击图形形状来导航代码。 从图中删除类。 将图表导出为图像。 通过“设置”>“其他设置”>“序列”从图表中排除类 智能接口(实验)

2019-11-26

EventBus.jar

EventBus 资源包 一个包

2019-07-17

支持三角形布局,两层波浪waveView,自动轮播,NavigationTabBar

主要支持三角形布局,两层波浪waveView,自动轮播,NavigationTabBar

2018-12-26

网络获取json解析json以及子线程显示

import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.json.JSONArray; import org.json.JSONObject; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.lang.reflect.Type; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParserFactory; import okhttp3.Call; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class MainActivity extends AppCompatActivity implements View.OnClickListener { RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendRequest = (Button) findViewById(R.id.send_request); sendRequest.setOnClickListener(this); recyclerView = (RecyclerView) findViewById(R.id.recycler_view); StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); } @Override public void onClick(View v) { if (v.getId() == R.id.send_request) { // sendRequestWithHttpURLConnection(); sendRequestWithOkHttp(); /* String url = "http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=json

2018-12-17

通过LitePal保存集合到本地(可增删改查)

通过LitePal保存集合到本地(可增删改查) compile 'org.litepal.android:core:1.3.2' 第一步建立 Connector.getDatabase(); 保存: Book book = new Book(); book.setName("The Da Vinci Code"); book.setAuthor("Dan Brown"); book.setPages(454); book.setPrice(16.96); book.setPress("Unknow"); book.save(); 更新: Book book = new Book(); book.setPrice(14.95); book.setPress("Anchor"); book.updateAll("name = ? and author = ?", "The Lost Symbol", "Dan Brown"); 删除: DataSupport.deleteAll(Book.class, "price < ?", "15"); 查询: List<Book> books = DataSupport.findAll(Book.class);

2018-12-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除