androidjson加密
⑴ Android開發中為什麼很少使用JSON存儲數據
是可以用JSON存儲數據對象的,而且也是Google推薦的,可以取代以實現Serializable來存儲對象的方法。下面是使用JSON存儲數據的原因。
Android開發中,涉及到對象存儲,通常的做法是直接實現`Serializable`。有關這個介面,它保證了實現該介面的類的對象能夠被`ObjectOutput/InputStream`直接輸入輸出,即序列化。這很方便,但是也很不好。
提到『序列化』,大多數人都想到`Serializable`,而實際上『序列化』的只是指「將對象的狀態信息轉換為可以存儲或傳輸的形式的過程」,java的`Serializabe`是位元組序列化的一種。
`Serialziable`的缺點之一是,實現了該介面的類將失去靈活性。這一點《Effective Java》第74條也指出了,實現了這個`Serializable`的類將會依賴這個類的內部演化,根源在於UID(Serial version UID)。如果你沒有指定UID,那麼每次這個類被序列化時都會根據這個類的當前狀態生成一個UID。想像這么一種場景:這個類已經被導出了,比如發給其他公司或部門使用了,然後你又修改了這個類,那麼當你再將這個類發布時,由於UID不同,其他公司或部門的程序員將可能得到一個「InvalidClassException」。
這種情況的根本原因是因為你不能控制序列化的實現,你控制不了UID的生成過程。這就需要一個自定義的序列化形式。在Android中,Google推薦JSON序列化。而且Android程序員也可以使用Gson等工具來進行序列化和反序列化。
和`Serializable`的位元組序列化不同,JSON序列化是字元序列化。
此外,`Serializable`只適合存儲對象。由於在傳輸時`Serializalbe`要做大量IO,Android提供了`Parcelable`。
最後,題主不應該把資料庫和JSON,XML比較,如果要比,也只能把資料庫和文件存儲比。資料庫適合存儲數量大,關系復雜的數據,這樣管理,查閱就很方便。與此相對文件存儲適合數量小,關系簡單的數據。
⑵ 利用Github保存json文件在Android端接收使用
1.自己注冊好GitHub,創建倉庫等等。
2.新建一個文本文件,輸入要保存的數據,比如
然後保存,然後修改後綴名,其它後綴名應該也可以,我這里修改為.js文件
3.用Git該文件提交到GitHub,比如我的提交到HdyLove/Json/article.js,然後輸入地址類似 https://qiusunshine.github.io/HdyLove/Json/article.js 即可訪問相應的地址,具體用戶名,倉庫名修改為自己的就可以了。
我是使用Volley+Glide使用的,Volley的JsonObjectRequest可以將該網址內容解析為json格式,用AndroidStudio自帶的Json處理方法即可處理
⑶ Android 中解析 JSON
JSON( JavaScript Object Notation ) 是一種輕量級的數據交換格式。易於閱讀和編寫,同時也易於機器解析和生成。
JSON 建構於兩種結構:
JSON 具有以下這些格式:
參考: Android 中 解析 JSON
Android 提供類四種不同的類來操作 JSON 數據。這些類是 JSONArray、JSONObject、JSONStringer 和 JSONTokenizer
為了解析 JSON 對象,須先創建一個 JSONObject 類的對象,需要傳入需解析的字元串 JSONObject root = new JSONObject(candyJson); 然後根據 JSONObject 對象提供方法以及數據類型解析對應 json 數據。下表展示一些 JSONObiect 提供的方法
示例:
⑷ Android 解析json問題
///http地址
StringhttpUrl=ip+":"+埠號+"/loginbyandroid/validate.do";
//HttpPost連接對象
HttpPosthttpRequest=newHttpPost(httpUrl);
//使用NameValuePair來保存要傳遞的Post參數
List<NameValuePair>params=newArrayList<NameValuePair>();
//添加要傳遞的參數
params.add(newBasicNameValuePair("loginId","value"));
params.add(newBasicNameValuePair("password","value"));
//設置字元集
HttpEntityhttpentity;
try{
httpentity=newUrlEncodedFormEntity(params,"utf-8");
//請求httpRequest
httpRequest.setEntity(httpentity);
//取得默認的HttpClient
HttpClienthttpclient=newDefaultHttpClient();
//取得HttpResponse
HttpResponsehttpResponse;
httpResponse=httpclient.execute(httpRequest);
//HttpStatus.SC_OK表示連接成功
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
//取得返回的字元串
StringstrResult=EntityUtils.toString(httpResponse
.getEntity());
JSONArrayjsonArray=newJSONArray(strResult);
for(inti=0;i<jsonArray.length();i++){
JSONObjectjsonObject=(JSONObject)jsonArray.opt(i);
Stringsuccess=jsonObject.getString("success");
StringJSESSIONID=jsonObject.getString("JSESSIONID");
StringloginName=jsonObject.getString("loginName");
Stringorgname=jsonObject.getString("orgname");
System.out.println("success="+success
+"JSESSIONID="+JSESSIONID+"loginName="
+loginName+"orgname="+orgname);
}
}else{
System.out.println("請求錯誤!");
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
⑸ json配置文件aes加密後還能被軟體載入嗎
不能。json配置文件aes加密後不能被軟體載入了,因為後台已經處於加密狀態了,加密是以某種特殊的演算法改變原有的信息數據,使得未授權的用戶即使獲得了已加密的信息,但因不知解密的方法,仍然無法了解信息的內容。
⑹ 如何將json對象通過aes進行加密
將json對象的 鍵值對,轉化為 ContentValues 對象中的鍵值對(鍵 為表中的欄位名),然後插入資料庫就可以了。 dbManager.insert(TABLENAME, null, values); 如果您對我的回答有不滿意的地方,還請您繼續追問; 答題不易,互相理解,互相幫助!
⑺ 大牛們,安卓和伺服器使用json交換數據,該怎麼加密
服務端是用servlet寫的吧 直接調用response的out輸出即可 response.getWriter().print("20"); 這樣安卓得到的返回值就是20
⑻ 請教個關於讀取json格式配置文件和傳輸數據加密的問題
JSON它可以看作是String類型,所以,你盡管加密吧,不過在使用的時候,你要對應的解密,然後再序列化JSON,再使用!
⑼ android使用JSON遇到的坑(1)
最近在開發的過程中遇到一個問題,服務端返回了一個JSON對象,在用JSON庫解析的時候出現了一個詭異的問題
服務端返回的原始JSON是
在程序中直接調用JSON中的方法
列印的日誌如下
通過JSON的方法取到的結果出現了不一致的情況。應該是轉換的時候精度出現了損失,一步一步跟到內部的實現方法,先看optLong()
這里調用了兩個參數的optLong()方法,在不傳默認值的時候如果出錯的話這個方法會返回0。再往裡跟,這個方法內部調用了JSON.toLong()方法。
接著向裡面走
看來問題是出在這里了,當輸入的參數為String的時候,toLong()方法會使用Double.parseDouble()方法解析,而我們知道double的精度是會有損失的,在 Google的文檔 上有這么一句話
在取非常大的數字的時候,會先轉換成String,再通過parseDouble()方法轉成long,這期間就造成了精度損失。
先得到String類型的值,再將String轉成long
這樣就可以正確的取到值了,Long.valueOf()內部實現調用了BigInteger中的方法,這樣就能保證結果正確了。
⑽ android json解析三種方式哪種效率最高
用org.json以及谷歌提供gson來解析json數據的方式更好一些。
安卓下通常採用以下幾種方式解析json數據:
1、org.json包(已經集成到android.jar中了)
2、google提供的gson庫
3、阿里巴巴的fastjson庫
4、json-lib
以Google出品的Gson為例,具體步驟為:
1、首先,從 code.google.com/p/google-gson/downloads/list下載GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar 到libs(項目根目錄新建一個libs文件夾)中。 可以使用以下兩種方法解析JSON數據,通過獲取JsonReader對象解析JSON數據。
代碼如下:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
2、使用Gson對象獲取User對象數據進行相應的操作:
代碼如下:
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
3、如果要處理的JSON字元串只包含一個JSON對象,則可以直接使用fromJson獲取一個User對象:
代碼如下:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());