Trang 45
Hình 5.9: Giao diện để nhận trả Json
Button(nút) Get Json thực hiện việc lấy dữ liệu từ webservices( dữ liệu json trả về thông qua webservices đã xây dựng ở chương 4), đọc và ghi lại kết quả ra chương trình.
Xây dựng class MapJson nhận thông tin từ webservices như sau: public class MapJson
{
public MapJson()
{
//TODO
}
public Dictionary<string, string> map1 = new Dictionary<string, string>();
public void setMap1(Dictionary<string, string> map1)
{
this.map1 = map1;
}
public Dictionary<string, string> getMap1()
Trang 46
return this.map1;
}
public Dictionary<string, string> map2 = new Dictionary<string, string>();
public void setMap2(Dictionary<string, string> map2)
{
this.map2 = map2;
}
public Dictionary<string, string> getMap2()
{
return this.map2;
}
public Dictionary<string, string> map3 = new Dictionary<string, string>();
public void setMap3(Dictionary<string, string> map3)
{
this.map3 = map3;
}
public Dictionary<string, string> getMap3()
{
return this.map3;
}
public Dictionary<string, string> map0 = new Dictionary<string, string>();
public void setMap0(Dictionary<string, string> map0)
{
this.map0 = map0;
}
public Dictionary<string, string> getMap0()
{
return this.map0;
}
public List<string> lstCommand = new List<string>();
public void setLstCommand(List<string> lstCommand)
{
this.lstCommand = lstCommand;
}
public List<string> getLstCommand()
{
return this.lstCommand;
}
public List<string> lstNameFunction = new List<string>();
public void setLstNameFunction(List<string> lstNameFunction)
{
this.lstNameFunction = lstNameFunction;
}
public List<string> getLstNameFunction()
{
return this.lstNameFunction;
}
public List<string> lstParamFunction = new List<string>();
public void setLstParamFunction(List<string> lstParamFunction)
{
this.lstParamFunction = lstParamFunction;
}
public List<string> getLstParamFunction()
{
return this.lstParamFunction;
Trang 47
public List<string> lstReturnFunction = new List<string>();
public void setLstReturnFunction(List<string> lstReturnFunction)
{
this.lstReturnFunction = lstReturnFunction;
}
public List<string> getLstReturnFunction()
{
return this.lstReturnFunction;
}
public List<string> list1 = new List<string>();
public void setList1(List<string> list1)
{
this.list1 = list1;
}
public List<string> getList1()
{
return this.list1;
}
public List<string> list2 = new List<string>();
public void setList2(List<string> list2)
{
this.list2 = list2;
}
public List<string> getList2()
{
return this.list2;
}
public List<string> list3 = new List<string>();
public void setList3(List<string> list3)
{
this.list3 = list3;
}
public List<string> getList3()
{
return this.list3;
} }
Thông tin nhận được sẽ chứa trong các List
lstCommand: chứa danh sách các chú thích
lstNameFunction: chứa tên các hàm
lstParamFunction: chứa các biến của hàm
lstReturnFunction: chứa các kết quả trả về Ở đây chúng ta lấy dữ liệu từ webservices:
Trang 48
Hình 5.10: Kết quả Web services trả về
Chúng ta lưu ý, chúng ta không dùng địa chỉ localhost hay 127.0.0.1 để chạy webservice từ máy local vì winphone sẽ không đọc được địa chỉ này, Json của winphone là Json.net do đó chúng ta phải chạy địa chỉ máy đang kết nối internet bằng cách, mở command line từ của sổ window và dùng lệnh ipconfig
Hình 5.10: Cách lấy địa chỉ máy
Địa chỉ máy khi connect internet
Trang 49
Xây dựng phương thức wc_DownloadStringCompleted get và set giá trị cho class JsonMap
private void Button_Click(object sender, RoutedEventArgs e) {
myJson(); }
public void myJson()
{
String myUrl =
"http://169.254.17.175:8080/MVCSpring/api/file/test.json";
//String myUrl = "http://192.168.
1.79:8080/MVCSpring/api/file/test.json";
WebClient wc = new WebClient();
wc.Headers["Accept"] = "application/json"; //wc.Headers["ContentType"] = "application/json";
//wc.DownloadStringAsync(new Uri(myUrl), UriKind.Relative);
wc.DownloadStringCompleted += new
DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri(myUrl));
}
Trong đó hàm wc_DownloadStringCompleted để gọi thực hiện việc lấy thông tin cho windows phone thông qua webservices
private void wc_DownloadStringCompleted(object sender,
DownloadStringCompletedEventArgs e) {
try
{
var myData = e.Result;
if (myData != null)
{
JObject jsonMap = JObject.Parse(myData.ToString());
MapJson mapJson = new MapJson();
Dictionary<string, string> setValuemap = new Dictionary<string,
string>();
// get new value
// get command function
String getValueMap = jsonMap.GetValue("lstCommand").ToString();
JArray jarrayValueMap = JArray.Parse(getValueMap);
List<string> getValueFromJson = new List<string>();
foreach (var itemList in jarrayValueMap) getValueFromJson.Add(itemList.ToString()); mapJson.setLstCommand(getValueFromJson);
// get name of function
getValueMap = jsonMap.GetValue("lstNameFunction").ToString();
jarrayValueMap = JArray.Parse(getValueMap);
Trang 50
foreach (var itemList in jarrayValueMap)
getValueFromJson.Add(itemList.ToString().Replace("\r\nfunction
", ""));
mapJson.setLstNameFunction(getValueFromJson);
// get parameter of function
getValueMap = jsonMap.GetValue("lstParamFunction").ToString();
jarrayValueMap = JArray.Parse(getValueMap);
getValueFromJson = new List<string>();
foreach (var itemList in jarrayValueMap) getValueFromJson.Add(itemList.ToString()); mapJson.setLstParamFunction(getValueFromJson);
//get function return
getValueMap = jsonMap.GetValue("lstReturnFunction").ToString();
jarrayValueMap = JArray.Parse(getValueMap);
getValueFromJson = new List<string>();
foreach (var itemList in jarrayValueMap) getValueFromJson.Add(itemList.ToString()
.Replace("\r\n\treturn", "=").Replace("\r\n\r\n", "")); mapJson.setLstReturnFunction(getValueFromJson);
//begin set value for map0
getValueMap = jsonMap.GetValue("map0").ToString();
JObject jsonMapValueMap = JObject.Parse(getValueMap);
setValuemap = new Dictionary<string, string>();
setValuemap.Add("finish",
jsonMapValueMap.GetValue("finish").ToString());
mapJson.setMap0(setValuemap);
//end set value for map0
//show result in winphone
string getValueMap0 = mapJson.getMap0()["finish"];
string getlstCommand = "";
foreach (var itemList in mapJson.getLstCommand()) getlstCommand += itemList.ToString();
string getlstNameFunction = "";
foreach (var itemList in mapJson.getLstNameFunction()) getlstNameFunction += itemList.ToString();
string getlstParamFunction = "";
foreach (var itemList in mapJson.getLstParamFunction()) getlstParamFunction += itemList.ToString();
string getlstReturnFunction = "";
foreach (var itemList in mapJson.getLstReturnFunction()) getlstReturnFunction += itemList.ToString();
} }
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} }
Trang 51
Để thực hiện được việc thực thi lệnh từ webservices chúng ta sử dụng core của
python được hổ trợ trong windows phone bằng phương thức sau:
/*method getResearch engine excute python *@param functionStr: script function
*@param nameFunction: name of function want executing *@param paramStr: name of param
*@param valueStr: value of param want executing. *@return Int function just demo with standard fuction. * **/
public String getResearch(String functionStr, String nameFunction, String
paramStr, String valueStr)
{
var pySrc = @functionStr;
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
ScriptSource source = engine.CreateScriptSourceFromString(pySrc,
SourceCodeKind.Statements);
CompiledCode compile = source.Compile();
String[] getValue = valueStr.Split(',');
String[] getParam = paramStr.Split(',');
for (int i = 0; i < getParam.Length; i++)
{
scope.SetVariable(getParam[i], Convert.ToInt32(getValue[i]));
}
var result = compile.Execute(scope);
var calcAdd = scope.GetVariable(nameFunction);
return calcAdd.ToString();
}
Từ thông tin của webservices và thông qua phương thức này chúng ta có thể thực thi được phương thức của class tiêu chuẩn.
private void executeFunctionDemo(int index, MapJson mapJson) {
String functionStr = mapJson.getLstNameFunction()[index] +
mapJson.getLstReturnFunction()[index];
String nameFunction = mapJson.getLstNameFunction()[index];
String paramStr = ""; String valueStr = "";
String[] lstTemp =
mapJson.getLstParamFunction()[index].ToString().Split(',');
for (int i = 0; i < lstTemp.Length; i++)
{
//Random rnd = new Random();
int a = 10;//
Trang 52 { paramStr += lstTemp[i].Split(' ')[1]; //valueStr += rnd.Next(100).ToString(); valueStr += a.ToString(); continue; } a = a + 1; paramStr += lstTemp[i].Split(' ')[1] + ","; //valueStr += rnd.Next(100).ToString() + ","; valueStr += a.ToString()+","; }
MessageBox.Show(getResearch(functionStr, nameFunction, paramStr,
valueStr)); }
Thông qua phương thức này bằng cách truyền chỉ số index- chính là thứ tự thực hiện của các hàm trong class tiêu chuẩn, từ đó ta lấy được các thông tin cần thiết như tên hàm, các biến, giá trị trả về và cả việc kiểm tra kết quả bằng việc gán giá trị cho chuổi valueStr để đọc giá trị cần thiết của hàm.
Kết quả sau khi truyền các tham số như sau
Trang 53
Như vậy về cơ bản chúng ta đã xây dựng xong thư viện đọc trả dữ liệu cho windows phone thông qua webservices.
Trang 54
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA LUẬN VĂN
Kết luận
Về cơ bản tác giả đã xây dựng thành công bộ thư viện cho phép chuyển đổi mã nguồn của một class tiêu chuẩn đơn giản để có thể thực thi được nội dung của class này trên Windows phone.
Đã xây dựng mô hình class tiêu chuẩn, mô hình đọc ghi lại file tiêu chuẩn, chuyển đổi class tiêu chuẩn đó về dạng file Json và thực thi file Json này trên Windows phone.
Hướng phát triển của đề tài
Với mô hình tác giả đã đề xuất ở trên thì có thể mở rộng cho nhiều ngôn ngữ lập trình khác nhau. Ở đây ta chỉ việc mở rộng thư viện đọc các file tiêu chuẩn, nghĩa là thư viện đọc file này có thể đọc các chương trình viết bằng Java, C++, … rồi chuyển đổi các mã nguồn này về một dạng cụ thể(Json, XML…) từ đó các chương trình có thể nhận và thực thi các mã nguồn này.
Trang 55
TÀI LIỆU THAM KHẢO
[1] Seventh Edition, P.J Deitel and H.M Deteil, JAVA HOW TO PROGRAM, 2010
[2] Craig Walls, Spring in Action, 3rd Edition
[3] WILLIE WHEELER , Spring in Practice
[4] Marten Deinum and Koen Serneels, Pro Spring MVC with Web Flow
[5] Rod Johnson, Spring Data
[6] Carlo Scarioni, Pro Spring Security
[7] FalaSel Solt, Pro Windows Phone App Development, 3rd Edition
[8] Lori Lalonde, David R. Totzke, Windows Phone 8 Recipes
[9] Henry Lee, Eugene Chuvyrov, Beginning Windows Phone App Development
[10] Tomasz Szostak, Windows Phone 8 Application Development Essentials
[11] Andrew Whitechapel, Sean McKenna, Windows Phone 8 Development Internals
[12] Shawn Wildermuth, Essential Windows Phone 7.5
[13] Adam Dawes, Windows 8 and Windows Phone 8 Game Development
[14] Henry Lee, Eugene Chuvyrov, Beginning Windows Phone 7 Development, 2nd Edition,
[15] Massimo Perga,Michael Sync, Windows Phone 7 in Action,Timothy Binkley- Jones
Trang 56
[17] Nick Randolph, Christopher Fairbairn, Professional Windows Phone 7 Application Development