Xây dựng chương trình trên windows phone nhận trả file json

Một phần của tài liệu Thư viện hỗ trợ thông dịch mã nguồn trên windows phone (Trang 44 - 56)

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

Một phần của tài liệu Thư viện hỗ trợ thông dịch mã nguồn trên windows phone (Trang 44 - 56)

Tải bản đầy đủ (PDF)

(56 trang)