androidjson怎麼用(Android去除json中轉義反斜槓)
2023-08-04 01:03:38 3
在 App 中添加一個活動頁,這個活動頁是用 H5 來展示的。
H5的連結是定義成固定的,即再進入時便有H5的連結;
H5 右上角有一個分享按鈕,點擊分享按鈕,分享一個新的連結地址到微信,或者微信朋友圈。
現在問題來了,分享的數據從哪拿呢?
可能朋友們覺得這很簡單啊 ,直接在創建 View 的時候拿唄!
其實單獨來這麼做肯定沒什麼問題,但是我們的這個 H5 的頁面承載了很多功能,有很多邏輯,所以如果這樣拿數據的話,又要新加判斷邏輯,因為其他跳轉過來的 H5 是不需要這樣的邏輯的。
於是我們集體碰了下頭,商量出來這樣的一個想法:
既然 我們的這個 H5 頁面的連結是固定的,那麼為了減少請求網絡以及避免給原有的 H5 頁面造成影響的情況下呢,我們可以把 分享要用到的數據放到網頁連麥,這樣再加載網頁時,其實在網頁中已經有數據了。
然後 Android 本地再通過 調用 js 往外暴露的方法,去拿到分享數據,這樣不就兩全其美了嗎!
於是說幹就幹:
第一步、等後端給寫好的 H5 地址第二步、加載這個 H5 地址第三步、給分享按鈕添加判斷邏輯,只有當前這種情況下,才出發 調取這個 js 方法然後給這個分享按鈕添加點擊事件,點擊事件我們是這樣定義的。
share_fl.setOnClickListener(new View.OnClickListener { @Override public void onClick(View v) { progress_webview.evaluateJavascript("javascript:app_share_ret", new ValueCallback { @Override public void onReceiveValue(String value) { if (TextUtils.isEmpty(value)) { return; } String newValue = StringEscapeUtils.unescapeJava(value.substring(1, value.length - 1)); ShareBean shareBean = AppClient.getInstance.getGson.fromjson(newValue, ShareBean.class); } }); } });
即,使用 evaluateJavascript 方法去調用 js ,因為這樣能拿到 js 方法返回的值,如果只是單純的去調用方法,那麼可以用
webview.loadUrl("javascript:js方法名")
第四步、問題來了返回的數據仍存在轉移字符
但是,我不是立馬發現的,指導我把網頁中定義好的字符串拷貝過來,然後和返回的字符串一起列印,我才發現:
拷貝過來的字符串 和 返回的字符串對比,拷貝的沒有轉義字符,而返回的有。
也就是返回的字符串是這樣的
{\"share_title\": \"分享標題\",\"share_desc\": \"分享描述\",\"share_link\": \"https://www.baidu.com\",\"share_image\": \"https://www.baidu.com/baidu.png\"}
但是複製過來後,列印出來的是這樣的
{"share_title": "分享標題","share_desc": "分享描述","share_link": "https://www.baidu.com","share_image": "https://www.baidu.com/baidu.png"}
但是,奇怪的是 iOS 能夠解析並且分享成功,但是 Andorid 確不行。
第五步、解決方案
剛開始的時候,簡單實用將轉義符號替換掉,成功了,但是問題是有可能內容中存在\的符號。
所以換的第二種
先依賴 apache 的一個文件
implementation "org.apache.commons:commons-lang3:3.8.1"
然後使用
String newValue = StringEscapeUtils.unescapeJava(value);
去掉了\
終於搞定!小夥伴們有沒有更好的方法,可以留言溝通一下哈~
,