原创 Socket 粘包 拆包;

爲什麼會粘包?舉個栗子: Socket連接成功就相當於通訊管道已經建立,客戶端就一直從管道中取數據,如果數據一次沒有取完就會發生遺留,這些遺留的數據就會和下次的數據包一起傳輸過來,然後就粘包了; 再看個數據: 採用0x7e 表示,若校

原创 Android 列表倒計時,和對列表刷新的優化,RecyclerView刷新單個控件;

1、每個Item一個計時器,條目多的話,性能損耗太大; 2、單個計時器,然後遍歷數據 刷新條目; 計時器兩種實現方式:1、Handler輪詢; 2、子線程睡眠(時間到後 移除列表中的條目會有問題); 源碼地址:https://githu

原创 Android 使用DialogFragment自定義Dialog、IOS風格;

AndroidX版本、DialogFragment實現; Kotlin代碼; IOS風格彈框、自定義彈框、底部選擇彈框、加載中彈框; 使用方便,一行代碼使用彈框,可以高度自定義: https://blog.csdn.net/qq_356

原创 Retrofit返回數據不是Json,返回String或Bytes;MalformedJsonException: Use JsonReader.setLenient(true)異常解決;

使用Retrofit接收的數據一直是Json,這次遇到了一個返回數據不是Json的,Gson解析當場報錯:com.google.gson.stream.MalformedJsonException: Use JsonReader.setL

原创 Android OkSocket設置消息頭,獲取消息體長度;使用OkSocket實現JT808協議通訊;

前言: 以下是我踩過的一個坑,文章的思路和方法還是對的,但是不適合JT808協議,更新了一版:JT808協議通訊,使用OkSocket實現長連接 OkSocket設置消息頭,獲取消息體長度 本文章只講如何使用OkSocket接收JT808

原创 AndroidStudio Plugin with id 'com.android.application' not found.

先看一下目錄結構: 沒有app目錄,所以也就沒有app目錄下的build.gradle; 只有一個項目級的build.gradle,此gradle還缺少配置; 把這些代碼放在gradle中,就放最外層就行; buildscript {

原创 Android Socket長連接的使用和封裝;

這次的項目JT/T 808協議使用Socket通訊,對原生的Socket研究了一下,把使用方法和心得寫一下; 這個時必須要加的權限: <uses-permission android:name="android.permission.I

原创 AndroidQ FileNotFoundException: open failed: EACCES (Permission denied),權限都允許了還是報錯

解決方法: 在清單文件AndroidManifest.xml中添加 : android:requestLegacyExternalStorage="true" 再說問題: 選擇手機中的文件(照片) 同樣的代碼,在 compileSdkVe

原创 Fragment切換動畫和回退棧的使用,和使用動畫後導致回退時的崩潰問題;

先說一下出現崩潰的問題:頁面是一個有很多下一步的界面,不想點擊下一步就打開一個新的Activity,所以就點擊下一步時切換Fragment,並使用回退棧處理返回事件; 單Activity多Fragment有回退棧,使用replace的方式

原创 Android JT808協議通訊,使用OkSocket實現長連接;

先看一下JT808數據的組成和OkSocket接收消息方式; 1、JT808數據的組成 標識位採用0x7e 表示,若校驗碼、消息頭以及消息體中出現0x7e,則要進行轉義處理,轉義 規則定義如下: 0x7e <————> 0x7d後

原创 Android 地址選擇器仿京東;

控件很簡單,上方tab是使用LinearLayout動態添加View,下方就是一個RecyclerView; 目前的數據就三級(省市區\縣),選擇完成或點擊確定就回調結果(Json字符串); 點擊上方的tab可以回選; .... 很簡單,

原创 Android AIDL的使用,進程間的通訊;

AIDL Android使用AIDL來實現進程間的通訊;  最簡單的進程,兩個APP(APP1(app_server) , APP2(app_client)),這裏app_server可以看作一個進程 , app_client也可以看作一

原创 Android MVVM模式DataBinding的使用 基礎篇;

1、在該module的gradle中配置dataBinding android { ****** dataBinding { enabled true } }   2、數據類繼承BaseObser

原创 OkSocket接收所有數據,可以不固定協議頭;

這個是OkSocket的源碼地址:https://github.com/xuuhaoo/OkSocket 這個框架必須要固定包頭,我們在實際的使用中一般都是固定包頭的,但是爲了方便調試或者沒有固定包頭的,我們需要修改一下源碼; 把源碼中的

原创 Android查看混淆後的報錯日誌;

查看TalkingData上面的報錯日誌,但是關鍵信息都被混淆了;需要查看混淆前的日誌; 1、打開proguardgui; 目錄:D:\AndroidStudio\sdk\tools\proguard\bin\proguardgui.b