前言
在日常工作中,后端返回的报文有时候格式比较混乱,不方便我们解析。然后我网上搜了一下,好像离线版的安卓平台JSON格式化工具并不多。不过没关系,没有的话那就去创造一个。
实现方法
实现方法其实很简单,直接利用GSON格式化就可以了,可以说毫无技术含量,不过近期在学习Kotlin,对于退出程序,自定义弹框这样的步骤,尝试使用Kotlin去实现,感觉还是有一定的收获的。
界面截图
部分代码
package com.example.jsonhelper
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.graphics.Color
import android.os.Bundle
import android.widget.*
import com.example.jsonhelper.framework.LyyBaseActivity
import com.google.gson.GsonBuilder
import com.google.gson.JsonParser
import org.json.JSONArray
import org.json.JSONObject
class ResultActivity : LyyBaseActivity() {
private lateinit var tipLl:LinearLayout
private lateinit var tipIv:ImageView
private lateinit var tipTv:TextView
private lateinit var sv:ScrollView
private lateinit var resultTv:TextView
private lateinit var copyBtn:Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_result)
initViews()
initTitleBar(title = "格式化结果", isShowBackIcon = true)
initEvents()
}
private fun initViews() {
tipLl=findViewById(R.id.tipLl)
tipIv=findViewById(R.id.tipIv)
tipTv=findViewById(R.id.tipTv)
sv=findViewById(R.id.sv)
resultTv=findViewById(R.id.resultTv)
copyBtn=findViewById(R.id.copyBtn)
val jsonStr = intent.getStringExtra(MainActivity.DATA_KEY)
if (jsonStr!=null&&isJSONStr(jsonStr)){
tipTv.text="老铁,这个JSON没毛病!"
tipTv.setTextColor(Color.parseColor("#419F4B"))
tipIv.setImageResource(R.drawable.icons8_checkmark_96px)
val gson = GsonBuilder().setPrettyPrinting().serializeNulls().create()
val resultText = gson.toJson(JsonParser.parseString(jsonStr))
resultTv.setText(resultText)
copyBtn.isEnabled=true
}else{
tipTv.text="老铁,这个JSON有点问题!"
tipTv.setTextColor(Color.parseColor("#F64439"))
tipIv.setImageResource(R.drawable.icons8_delete_sign_96px)
resultTv.text=""
copyBtn.isEnabled=false
}
}
/**
* 判断字符串是否为JSON字符串。既不是对象,也不是数组,那么它就不是JSON字符串,否则就是JSON字符串
*/
private fun isJSONStr(str:String):Boolean{
try {
JSONObject(str)
} catch (e: Exception) {
try {
JSONArray(str)
} catch (e: Exception) {
return false
}
}
return true
}
private fun initEvents() {
copyBtn.setOnClickListener {
copyText(resultTv.text.toString())
}
}
private fun copyText(content:String){
val clipboardManager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val text = ClipData.newPlainText("LABEL", content)
clipboardManager.setPrimaryClip(text)
Toast.makeText(this,"复制成功!",Toast.LENGTH_SHORT).show()
}
}
安装包下载
链接:https://pan.baidu.com/s/1CqgXjbG3ZNICpKOEWSGKzw
提取码:8jn4
项目完整源码
已经放到码云上,点我跳转