Android報表解決方案 使用開源組件iChartjs(二)

動態刷新圖標數據

上次介紹瞭如何在android設備上利用ichartjs來輕鬆構建圖表,很簡單就可以讓你的手機上展示豐富的報表數據信息,但是實際應用中這些數據是會不斷刷新或者是實時刷新的,圖表中的數據都是動態獲取的。
今天我們介紹如何讓本地報表動起來 實現數據刷新


要做到這個也很簡單就是通過webView的api來實現javascript調用動態傳遞數據來更新圖表,下面來看具體實現:
接着在上次的項目基礎上增加功能,


這裏是需要在java代碼中調用javascript方法 首先需要開啓JavaScript支持  


[java] view plaincopy
  1. wv.getSettings().setJavaScriptEnabled(true);    


想要更新圖表,首先就要獲得數據  獲取數據的方式有很多 可以是通過android聯網獲取服務端的數據 可以是http 也可以是webservice ,也可以從android本地獲取數據,數據庫裏或者實時系統數據能夠獲取 ,拿到的數據無論什麼格式 json xml 對象 都沒問題 只要最終轉換成ichartjs所需要的數據就可以了
我這裏寫了個方法通過隨機數的方式模擬了獲取數據


[java] view plaincopy
  1. //模擬獲取遠程數據 這裏可以是聯網到服務端獲取數據  
  2.     private String getRemoteData(){  
  3.          try {    
  4.                 JSONObject object1 = new JSONObject();    
  5.                 object1.put("name""北京");    
  6.                 object1.put("color""#1f7e92");    
  7.                 Random random = new Random();  
  8.                 //js中的數組類型要使用JSONArray對象  
  9.                 JSONArray jadata= new JSONArray();    
  10.                 for(int i=0;i<12;i++){  
  11.                     jadata.put(random.nextInt(40));  
  12.                 }  
  13.                 object1.put("value", jadata);      
  14.                 JSONArray jsonArray = new JSONArray();    
  15.                 jsonArray.put(object1);    
  16.                 return jsonArray.toString();    
  17.             } catch (JSONException e) {    
  18.                 e.printStackTrace();    
  19.             }    
  20.             return null;    
  21.     }  

或者是

[java] view plaincopy
  1. //模擬獲取遠程數據 這裏可以是聯網到服務端獲取數據  
  2.     private String getRemoteData(){  
  3.          try {    
  4.                 Random random = new Random();  
  5.                 JSONObject object1 = new JSONObject();    
  6.                 object1.put("name""Renren");    
  7.                 object1.put("color""#b5bcc5");    
  8.                 object1.put("value", random.nextInt(40));    
  9.                 JSONObject object2 = new JSONObject();    
  10.                 object2.put("name""Facebook");    
  11.                 object2.put("color""#b5bcc5");    
  12.                 object2.put("value", random.nextInt(40));    
  13.                 JSONObject object3 = new JSONObject();    
  14.                 object3.put("name""StumbleUpon");    
  15.                 object3.put("color""#b5bcc5");    
  16.                 object3.put("value", random.nextInt(40));    
  17.                 JSONObject object4 = new JSONObject();    
  18.                 object4.put("name""reddit");    
  19.                 object4.put("color""#b5bcc5");    
  20.                 object4.put("value", random.nextInt(40));    
  21.                 JSONObject object5 = new JSONObject();    
  22.                 object5.put("name""Hi5");    
  23.                 object5.put("color""#b5bcc5");    
  24.                 object5.put("value", random.nextInt(40));    
  25.                 JSONObject object6 = new JSONObject();    
  26.                 object6.put("name""LinkedIn");    
  27.                 object6.put("color""#b5bcc5");    
  28.                 object6.put("value", random.nextInt(40));    
  29.                 JSONObject object7 = new JSONObject();    
  30.                 object7.put("name""Twitter");    
  31.                 object7.put("color""#b5bcc5");    
  32.                 object7.put("value", random.nextInt(40));    
  33.                 JSONObject object8 = new JSONObject();    
  34.                 object8.put("name""Other");    
  35.                 object8.put("color""#b5bcc5");    
  36.                 object8.put("value", random.nextInt(40));    
  37.                   
  38.                   
  39.                   
  40.                   
  41.                 JSONArray jsonArray = new JSONArray();    
  42.                 jsonArray.put(object1);    
  43.                 jsonArray.put(object2);    
  44.                 jsonArray.put(object3);    
  45.                 jsonArray.put(object4);    
  46.                 jsonArray.put(object5);    
  47.                 jsonArray.put(object6);    
  48.                 jsonArray.put(object7);    
  49.                 jsonArray.put(object8);    
  50.                 return jsonArray.toString();    
  51.             } catch (JSONException e) {    
  52.                 e.printStackTrace();    
  53.             }    
  54.             return null;    
  55.     }  

根據圖表數據的具體結構來組裝數據就可以了 通過 JSONObject和JSONArray 可以通過面向對象的方式組裝數據
需要注意的是 這裏組裝基本類型的數組時 一定要使用JSONArray 這樣得到的數據才能夠在javascript中解析出來 
數據得到了 下一步就是要在html的界面中來把數據更新到圖表中 
這裏我通過一個更新按鈕來觸發事件 獲取數據並更新 當然出發方式根據具體需求可以自己設置
觸發事件方法中可以通過java代碼調用javascript的方法來實現數據傳遞和更新 實現很簡單 具體操作如下


[java] view plaincopy
  1. public void updateBtn(View view){  
  2.         wv.loadUrl("javascript:setContentInfo('"+getRemoteData()+"')");    
  3.     }  

webView api裏的方法 這裏的作用是嗲用webview加載的html界面裏的setContentInfo方法 該方法傳遞一個參數 數據類型爲String
那麼html裏的方法是怎麼實現的呢  看下面代碼


[javascript] view plaincopy
  1. function setContentInfo(data)  {    
  2.                 var jsonObjects = eval(data);   //通過eval方法處理得到json對象數組    
  3.                 chart.push("data",jsonObjects);  
  4.                 chart.setUp();  
  5.                 chart.draw();  
  6.             }    

把傳遞過來的string轉換成jsonObject對象 再利用ichartjs的API就實現了數據的更新 

很輕鬆就實現了數據的刷新 來看效果圖






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章