自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (2)
  • 收藏
  • 关注

原创 协程启动 GlobalScope.launch和runBlocking的区别

其中runBlocking会阻塞主线程,直到回调代码执行完毕,该方法不能用来异步启动,只能用来从非协程作用域切换到协程作用域(比如执行suspend块代码)使用GlobalScope.launch{}.start(),表示在非协程作用域中启动协程,该方法不会阻塞主线程。可以看出,runBlocking在执行时会阻塞主线程,而GlobalScope不会。runBlocking和GlobalScope.launch{}.start()如果想在协程非作用域中启动协程,有两种方法。执行下操作就能看出区别。

2023-04-06 11:17:58 793 1

原创 皮皮传 汉化 中文 全集

皮皮传个人汉化

2022-08-05 12:16:26 865 1

原创 viewbinding快速填充数据

viewbinding控件id和any属性名称一致,然后使用反射填充数据fun ViewBinding.invoke(any: Any){ any.javaClass.apply { declaredFields.forEach { kotlin.runCatching { it.isAccessible = true val value = it[any].toString()

2022-02-25 11:06:22 2160

原创 android11以上 uri转file uri转真实路径

很久以前,曾经写过针对anddroid10 uri转file的方法:android10以上 uri转file uri转真实路径_jingzz1的博客-CSDN博客_android uri转filefun uriToFile(context: Context, uri: Uri): File? = when(uri.scheme){ ContentResolver.SCHEME_FILE -> uri.toFile() ContentResolver.SCHEME_CONTENT ->{ val

2021-10-31 12:29:18 4897 5

原创 kotlin 判断文件编码

fun code(ins: InputStream): String { val head = ByteArray(3) ins.read(head) return when { (head[0].toInt() == -1 && head[1].toInt() == -2) -> "UTF-16" (head[0].toInt() == -2 && head[1...

2021-10-27 14:21:36 407

原创 kotlin serialization 使用指南(一)

Kotlin serialization是由kotlin官方提供,可将kotlin对象序列化和反序列化的插件,支持序列化格式包括:JSON, Protobuf, CBOR, Hocon 和Propertiesserialization使用非常简单: //序列化 val data = Project("kotlinx.serialization", "Kotlin") val json = Json.encodeToString(data) //反序列化 .

2021-10-08 12:24:56 8622 2

原创 android10以上,访问Android/data文件

自从android10使用分区存储后,文件的操作显得更为复杂,幸运的是,谷歌为我们提供许多操作简单的api,这篇文章主要讲的是android除沙盒目录和共享目录外其他目录的操作android10以上,如果想要获取其他文件,最简单的方法是申请MANAGE_EXTERNAL_STORAGE权限,获取该权限之后,任何文件都可以正常操作,然后你就不用往下看了……虽然不可避免地,MANAGE_EXTERNAL_STORAGE注定会被滥用,我个人并不推荐使用MANAGE_EXTERNAL_STORAGE权限,因

2021-09-25 20:48:21 4435

原创 kotlin list转map

kotlin list转map需要分成两步,首先转成List<Pair> ,List<Pair>再转成mapclass Person(val name:String,val age:Int)val list = mutableListOf(Person("1",0),Person("2",0))val map<String,Person> = list.map { it.name to it }.toMap()...

2021-09-16 09:35:31 2954

原创 android CheckBox修改颜色

如果只想修改颜色,不需要修改图像的话,使用buttonTint属性足够 <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:buttonTint="#990000" android:checked="true"/>

2021-08-09 11:34:34 3611

原创 DataBinding自定义双向绑定

这里以CompoundButton系列控件(CheckBox、Switch、ToggleButton等CompoundButton)为例双向绑定Checked首先是写入Checked的方法@BindingAdapter("isCheck")fun setCheck(view: CompoundButton, isCheck:Boolean?){ if(isCheck != null && view.isChecked != isCheck) view.is

2021-08-04 08:57:08 680

原创 kotlin 集合去重

val array = listOf(1,2,3,1,2,2,3,1) println(array) //去重 println(array.toSortedSet().toList()) print: [1, 2, 3, 1, 2, 2, 3, 1] [1, 2, 3]

2021-04-04 12:45:02 5737

原创 andorid10 调用震动

获取震动器val vibrator = (getSystemService(Context.VIBRATOR_SERVICE) as Vibrator)调用震动vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE))其中参数 200表示震动200毫秒,DEFAULT_AMPLITUDE表示震动效果为默认从方法可以看出,震动效果主要用VibrationEffect操作.

2021-04-01 16:18:10 1482

原创 edittext 正则限制

//edittext 正则限制fun EditText.regex(regex:String){ addTextChangedListener(object : TextWatcher { var last:String = "" override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } override fun.

2021-03-29 10:45:50 251

原创 kotlin Unicode、String互转

//char ->Stringfun encode(char: Char) = "\\u${char.toInt().toHexString()}"//unicode ->Stringfun encode(text: String) = text .toCharArray() .map { encode(it) } .toList() .joinToString(separator = "", truncated = "")//String -&g..

2021-02-28 20:34:01 2808

原创 Retrofit2 json请求

使用Retrofit2进行json请求是个老生常谈的问题,值得单独水一期总体来说,Retrofit2传递json有三种方法首先初始化一下,这里使用官方提供的GsonConverterimplementation 'com.squareup.retrofit2:converter-gson:2.6.2'val retrofit = Retrofit.Builder().client(OkHttpClient.Builder().build()) .baseUrl(b

2021-01-29 09:46:29 1346

原创 MutableLivedata和LiveData的区别

两者的区别看源码就知道,LiveData的postValue和setValue方法是protected,而MutableLiveData这两个方法则是public,也就是说Livedata只允许调用observe方法被动监听数据变化,而MutableLiveData除了监听变化外,还可以用postValue和setValue方法发射数据...

2021-01-19 13:29:29 2220 1

原创 WindowInsetsController简单使用

WindowInsetsController是android官方在api30之后提供,用于控制window的控制类,实现window控件的简单化要使用WindowInsetsController,需要先将core版本提高到1.5.0以上:implementation 'androidx.core:core:1.5.0-alpha05'实例化WindowInsetsController:val controller = ViewCompat.getWindowInsetsControlle

2020-12-21 10:59:04 20981 7

原创 android 通过uri获取文件大小,uri获取文件长度

通过uri获取文件大小有两种方法,一种是通过FileDescriptor获取 fun length(context: Context, uri: Uri): Long = when (uri.scheme) { ContentResolver.SCHEME_FILE -> File(uri.path).length() ContentResolver.SCHEME_CONTENT -> try {

2020-12-13 12:02:46 4090 3

原创 android Switch 修改颜色 修改样式 滑块颜色

设置switch颜色的四个属性: <androidx.appcompat.widget.SwitchCompat android:layout_width="wrap_content" android:layout_height="wrap_content" app:trackTint="#aaaaaa" app:trackTintMode="multiply" app:thumbTint="@color/c.

2020-11-27 14:00:38 4193

原创 intellij idea , android studio,kotlin类型展示

新版和旧版设置方法不同旧版 :Settings -> Editor -> General -> Appearance -> "Show parameter name hints" -> Configure... -> Language: Kotlin -> Options -> "Show local variable type hints"新版:Settings->Editor -> Inlay Hints -> kot..

2020-11-26 17:54:13 1051 1

原创 android studio 4.1 使用Parcelable插件

as4.1不需要什么Parcelable插件了,开发工具自带转Parcelable转能只需要让类实现Parcelable (implements Parcelable),然后鼠标移动到类名上,快捷键alt+enter,选择Add Parcelable Implementation,就能自动生成Parcelable代码...

2020-11-20 10:52:20 2278 1

原创 Fragment 监听返回键操作

androidX之后,添加了新的返回事件api requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { //该事件是否自行处理 true:该事件不向上传递

2020-10-29 14:17:10 1784

原创 Retrofit 协程 下载

下载//Service的写法interface UrlService { @Streaming @GET suspend fun downloadFile(@Url url:String): Response<ResponseBody>}调用下载方法下载状态是以流的形式打开,获取到流后转成LiveData,这样就可以绑定生命周期了就是这么简单!! val dowloadUrl = "下载地址" download(.

2020-08-31 17:02:53 2868 6

原创 is attempting to registerForActivityResult after being created. Fragments must call registerForActiv

is attempting to registerForActivityResult after being created. Fragments must call registerForActivityResult() before they are created (i.e. initialization, onAttach(), or onCreate())fragment:1.3.0-alpha08 之后,需要在Fragment注册registerForActivityResult,注册体需

2020-08-21 11:20:14 7322

原创 Only classes are allowed on the left hand side of a class literal

kotlin中,如果我们希望获取到某个类或属性的类型,一般会用::class.java 或者.javaClass,比如我们希望获取String的type,可以直接这样写:String::class.java 这样写的合法的,因为编译器知道String的类型但当一个对象有多个泛型嵌套时,比如:List<String>::class.java ,这时编译器就会提示:Only classes are allowed on the left hand side of a class litera..

2020-08-07 15:06:51 5570 1

原创 android 高德地图 定位蓝点不显示

照官方文档的写法: MyLocationStyle().apply { interval(2000) showMyLocation(true) aMap.myLocationStyle = this aMap.isMyLocationEnabled = true }写完后发现蓝点没出来,看遍文档也没发现原因,最后回去查看去年写的代码,发现要显示定位蓝点,需要 ACC.

2020-07-18 20:07:38 2401

原创 registerForActivityResult()

registerForActivityResult()是startActivityForResult()的替代,简化了数据回调的写法最简单最常用的写法: //java写法 registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Ove.

2020-07-14 15:27:42 49155 11

原创 MoshiUtils Moshi解析json Moshi解析工具类

添加依赖: kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.9.3' implementation 'com.squareup.moshi:moshi:1.9.3'使用kotlin的内联函数,很大程度上可以缩减代码,减少一些不必要的传参,比如可以不用传class,type等import com.squareup.moshi.Moshiimport com.squareup.moshi.Typesimport jav...

2020-07-13 15:05:39 2380

原创 Retrofit+协程 文件下载

//Service的写法interface UrlService { @Streaming @GET suspend fun downloadFile(@Url url:String): Response<ResponseBody>}//开启协程并下载,为了方便调用,下载方法我封装成DSL,参考DowloadBuild lifecycleScope.launch() { val response = RetrofitUtils.create() .

2020-07-09 18:12:04 2774 8

原创 Retrofit json上传,文本上传,文件上传,多文件上传,文本+文件上传,多文件+多文件上传

首先有个坑,Retrofit不会识别Any类型,如果直接使用Any类型传递参数,会报Parameter type must not include a type variable or wildcard的错误,这种时候需要添加注解:@JvmSuppressWildcards//一般我们直接添加到类名上面,如:@JvmSuppressWildcardsinterface UrlService {}也可以添加到请求方法体上,如: @JvmSuppressWildcards @

2020-07-06 12:22:35 1616

原创 android studio4.0 无法自动创建activity,fragment等问题

module下的 build.gradle文件,如果你需要配置signingConfigs模块,那么有两个规则需要遵守1,signingConfigs模块的配置需要写在buildTypes模块之前,如下:android { …… signingConfigs { …… } buildTypes { release { minifyEnabled false proguardFi

2020-06-08 12:59:48 5736 15

原创 android 根据MimeType获取文件扩展名(后缀名)

String extensionName = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType)

2020-05-27 11:18:15 2057

原创 android10 获取文件夹,遍例文件夹下所有文件

//首先,调用选择器获取文件夹uri val PICK_FILE = 10 private fun pickFile() { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) startActivityForResult(intent, PICK_FILE) } override fun onActivityResult(requestCode: Int, resultCode:

2020-05-25 17:33:38 5953

原创 android10 保存图片到系统相册,刷新媒体库

android9之前,保存图片使用MediaScannerConnection,android10之后,则需要把文件复制到DCIM目录下,虽然android10的方法可以向下兼容,但复制文件效率始终不如刷新媒体库,所以最好是根据SDK_INT选择方法 //保存图片 public static void scanFile(File file){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){

2020-05-22 08:46:44 8939 2

原创 android10以上 uri转file uri转真实路径

fun uriToFile(context: Context, uri: Uri): File? = when(uri.scheme){ ContentResolver.SCHEME_FILE -> uri.toFile() ContentResolver.SCHEME_CONTENT ->{ val cursor = context.contentResolver.query(uri, null, null, null, null) curso.

2020-05-18 10:50:06 22273 9

原创 java调用kotlin的扩展方法、扩展属性、扩展函数

kotlin的扩展方法,其实是以java的静态方法形式存在的,也就是说如果要用java调用kotlin的扩展方法,和调用静态函数一样调用扩展属性也是相同的道理举个例子,我们在某个kotlin文件(文件名为Utils.kt)里为Throwable写一个根据错误类型返回错误消息的扩展方法:fun Throwable.getShowMsg1():String{ return when(this){ is HttpException ->"${ when(

2020-05-13 11:36:22 9072 3

原创 android10调用相机和相册,裁剪图片,anroid11 图片操作工具类

由于是调用系统功能,因此不需权限 //调用相机 PhotoUtils.camera(supportFragmentManager,"你的authority"){ uri, success, msg -> if(success) Glide.with(this).load(uri).into(binding.ivImage) } //调用相册 .

2020-05-11 13:48:27 8740 26

原创 android uri获取文件名

从android11开始,文件只能通过uri操作,包括获取文件名var displayName = "" val query = context.contentResolver.query(uri, null, null, null, null, null) query?.use { it.moveToFirst() displayName = it.getString(it.getColumnIndex(Openabl

2020-05-08 17:32:14 3339

原创 ViewBinding封装基类(BaseActivity,BaseFragment)

BaseActivity:public class BaseActivity<T extends ViewBinding> extends AppCompatActivity { protected T binding; @Override protected void onCreate(@Nullable Bundle savedInstanceStat...

2020-05-03 21:32:15 12142 4

原创 android 闪光灯(手电筒)工具类

需要闪光灯权限:<uses-permission android:name="android.permission.FLASHLIGHT"/>部分手机需要摄像头权限:(敏感权限)<uses-permission android:name="android.permission.CAMERA"/>调用前,至少需要初始化一次,可以考虑在Application里调用...

2020-04-27 11:52:46 1769 2

emojis表情包 json文档

emojis表情包,里面有1000+个表情,归好类,写好标题,能够解析json的就会用 json格式: { "title": "♈", "name": "星座", "emojis": ["♈", "♉", "♊", "♋", "♌", "♍", "♎", "♏", "♐", "♑", "♒", "♓", "⛎"] }

2020-09-28

中国省市区json.docx

中国各省,各市,各地区json 数据结构: { "provinceName": "天津市", "citys": [{ "cityName": "天津市", "areas": ["和平区", "河东区", "河西区", "南开区", "河北区", "红桥区", "塘沽区", "汉沽区", "大港区", "东丽区", "西青区", "津南区", "北辰区", "武清区", "宝坻区", "宁河县", "静海县", "蓟县"] }] }

2020-01-19

空空如也

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

TA关注的人

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