|
|
导航: |
论坛 -> 文档资料
斑竹:liumazi,ruralboy |
|
作者: |
|
2013/10/23 17:21:08 |
标题: |
XE5安卓下调用公共平台信息服务的示例 |
浏览:4546 |
|
加入我的收藏 |
楼主: |
1、概述 互联网上有很多免费的公共服务资源可以利用,比如,飞信接口、微博接口、淘宝接口、地图服务、气象服务等等。我们在使用Delphi进行手机端应用程序开发时,就可以利用这些资源,实现各种自己实现起来比较难的、更为专业化的手机软件功能。 调用这种服务一般解决以下两个问题即可:
1)、公共服务的接口标准的熟悉 2)、结果的解析与表现
下面,俺给出一个调用百度地图服务,实现地理信息在线查询的简单demo。
2、先看设计时界面 搭建如下界面,拖入一个TIDHTTP控件,作为通用控件:
此帖子包含附件:
大小:102.9K |
----------------------------------------------
樵夫的大马甲 |
作者: |
|
2013/10/23 17:21:57 |
1楼: |
3、看程序代码:
unit main;
interface
uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Layouts, FMX.Memo, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IDURI, MBJson,system.ioutils;
type TForm1 = class(TForm) StyleBook1: TStyleBook; Panel1: TPanel; CornerButton1: TCornerButton; CornerButton2: TCornerButton; CornerButton3: TCornerButton; Panel2: TPanel; CornerButton5: TCornerButton; CornerButton6: TCornerButton; CornerButton4: TCornerButton; Memo1: TMemo; http: TIdHTTP; procedure ResolveResult(Data: string); procedure CornerButton3Click(Sender: TObject); procedure CornerButton5Click(Sender: TObject); procedure CornerButton2Click(Sender: TObject); procedure CornerButton4Click(Sender: TObject); procedure CornerButton6Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.fmx}
// // 解析结果的过程... procedure TForm1.ResolveResult(Data: string); var Json,tmpjson,LocJson: TMBJson; Records: TMBJsonArray; Status,i: integer; RetMsg,tmpstr: string; Lat,Lng: double; begin Json:=TMBJson.Create(data); Status:=Json.GetInt('Status'); RetMsg:=Json.GetString('Message'); Records:=Json.GetJSonArray('results'); memo1.Lines.Add('地理信息查询成功!内容如下:'); memo1.Lines.Add('----------'); memo1.Lines.Add('Status='+inttostr(status)); memo1.Lines.Add('Message='+RetMsg); memo1.Lines.Add('RecordCount='+inttostr(records.length)); for i := 1 to records.length do begin tmpJson:=Records.getJSon(i-1); memo1.Lines.Add(''); tmpstr:=tmpJson.GetString('Name'); memo1.Lines.Add('Name='+tmpstr); tmpstr:=tmpJson.GetString('Address'); memo1.Lines.Add('Address='+tmpstr); tmpstr:=tmpJson.GetString('Telephone'); memo1.Lines.Add('Telephon_e='+tmpstr); tmpstr:=tmpJson.GetString('uid'); memo1.Lines.Add('UID='+tmpstr); LocJson:=tmpJson.GetJSon('Location'); Lat:=LocJson.GetDouble('Lat'); Lng:=LocJson.GetDouble('Lng'); memo1.Lines.Add('位置=('+formatfloat('0.00',lng)+','+formatfloat('0.00',lat)+')'); end; FreeAndNil(Json); end;
// // 退出... procedure TForm1.CornerButton2Click(Sender: TObject); begin halt; end;
// // 清屏... procedure TForm1.CornerButton3Click(Sender: TObject); begin memo1.Lines.Clear; end;
// // 找餐馆... procedure TForm1.CornerButton4Click(Sender: TObject); var url,tmpstr: string; Response: TBytes; stream: TMemoryStream; ok: boolean; begin // // URL生成... url:=TIdURI.URLEncode('http://api.map.baidu.com/place/v2/search?&q=餐馆®ion=桐庐&output=json&ak=834aa2775e492b452431110b23ddc1e9'); // // 调用百度Place API服务... Stream:=TMemoryStream.Create; http.HTTPOptions:=[hoKeepOrigProtocol]; http.Request.Connection:='Keep-Alive'; try http.Get(url,stream); ok:=(Stream.Size>0); except ok:=false; end; http.Disconnect; // // 成功,显示结果... if ok then begin Stream.Position:=0; SetLength(Response,Stream.Size); Stream.Read(Response[0],Stream.Size); tmpstr:=StringOf(Response); ResolveResult(tmpstr); end // // 失败、提示... else showmessage('调用Baidu API失败!'); FreeAndNil(Stream); end;
// // 找饭店... procedure TForm1.CornerButton5Click(Sender: TObject); var url,tmpstr: string; Response: TBytes; stream: TMemoryStream; ok: boolean; begin // // URL生成... url:=TIdURI.URLEncode('http://api.map.baidu.com/place/v2/search?&q=宾馆®ion=桐庐&output=json&ak=834aa2775e492b452431110b23ddc1e9'); // // 调用百度Place API服务... Stream:=TMemoryStream.Create; http.HTTPOptions:=[hoKeepOrigProtocol]; http.Request.Connection:='Keep-Alive'; try http.Get(url,stream); ok:=(Stream.Size>0); except ok:=false; end; http.Disconnect; // // 成功,显示结果... if ok then begin Stream.Position:=0; SetLength(Response,Stream.Size); Stream.Read(Response[0],Stream.Size); tmpstr:=StringOf(Response); ResolveResult(tmpstr); end // // 失败、提示... else showmessage('调用Baidu API失败!'); FreeAndNil(Stream); end;
// // 找商店... procedure TForm1.CornerButton6Click(Sender: TObject); var url,tmpstr: string; Response: TBytes; stream: TMemoryStream; ok: boolean; begin // // URL生成... url:=TIdURI.URLEncode('http://api.map.baidu.com/place/v2/search?&q=商店®ion=桐庐&output=json&ak=834aa2775e492b452431110b23ddc1e9'); // // 调用百度Place API服务... Stream:=TMemoryStream.Create; http.HTTPOptions:=[hoKeepOrigProtocol]; http.Request.Connection:='Keep-Alive'; try http.Get(url,stream); ok:=(Stream.Size>0); except ok:=false; end; http.Disconnect; // // 成功,显示结果... if ok then begin Stream.Position:=0; SetLength(Response,Stream.Size); Stream.Read(Response[0],Stream.Size); tmpstr:=StringOf(Response); ResolveResult(tmpstr); end // // 失败、提示... else showmessage('调用Baidu API失败!'); FreeAndNil(Stream); end;
end.
4、看运行效果:
此帖子包含附件:
大小:71.3K |
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2013/10/23 17:24:27 |
2楼: |
5、其他:
XE5下缺少好用的Json解析控件,试了一下dbxjson类,但感觉不是很好用。所以,咱改造了QUickBurro桌面开发包中的QBJson单元,实现了在XE4、XE5下可以进行Json读写的单元MBJson。通过在本类中应用,效果不错。
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2013/10/23 19:48:50 |
3楼: |
6、稍加变化,就能成为小应用程序:
// // 解析结果的过程... procedure TForm1.ResolveResult(Data: string); var Json,tmpjson,LocJson: TMBJson; Records: TMBJsonArray; i: integer; tmpstr: string; Lat,Lng: double; begin Json:=TMBJson.Create(data); Records:=Json.GetJSonArray('results'); Grid.BeginUpdate; Grid.RowCount:=Records.length; for i := 1 to records.length do begin tmpJson:=Records.getJSon(i-1); tmpstr:=tmpJson.GetString('Name'); grid.Cells[0,i-1]:=tmpstr; tmpstr:=tmpJson.GetString('Address'); grid.Cells[1,i-1]:=tmpstr; try tmpstr:=tmpJson.GetString('Telephone'); except tmpstr:='<none>'; end; grid.Cells[2,i-1]:=tmpstr; LocJson:=tmpJson.GetJSon('Location'); Lat:=LocJson.GetDouble('Lat'); Lng:=LocJson.GetDouble('Lng'); grid.Cells[3,i-1]:=formatfloat('0.00',lng)+','+formatfloat('0.00',lat); end; Grid.EndUpdate; FreeAndNil(Json); end;
此帖子包含附件:
大小:83.4K |
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2013/10/23 19:55:01 |
4楼: |
顶一下,砍柴,樵夫,
----------------------------------------------
-相互学习,共同进步! 努力每一天,不能望山跑死马 发上等愿,结中等缘,享下等福;择高处立,寻平处住,向宽处行
|
作者: |
|
2013/10/24 19:37:09 |
5楼: |
厉害
----------------------------------------------
delphi你妹
|
作者: |
|
2013/10/24 21:22:44 |
6楼: |
顶一个,太厉害了。
----------------------------------------------
-
|
作者: |
|
2013/10/24 22:22:45 |
7楼: |
嘿嘿,小玩意而已。
此帖子包含附件:
大小:74.3K |
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2013/10/25 11:48:50 |
8楼: |
@樵夫, 请问你WebBrowser使用百度地图接口打开地图速度怎么样? 我的很慢呀。(网络正常)
谢谢!
----------------------------------------------
-
|
作者: |
|
2013/10/25 22:17:02 |
9楼: |
我用wifi 和3g上网,速度都还行哦。 感觉百度地图服务马马虎虎过得去
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2013/11/5 14:18:22 |
10楼: |
樵夫大虾好厉害。。。
----------------------------------------------
kittyapp
|
作者: |
|
2014/1/2 12:39:57 |
11楼: |
好厉害的樵夫。
----------------------------------------------
-
|
作者: |
|
2014/2/10 19:53:55 |
12楼: |
亲: MBJson能否共享下呀
----------------------------------------------
lin
|
作者: |
|
2014/2/27 11:42:32 |
13楼: |
可以下载么?
----------------------------------------------
-
|
作者: |
|
2014/3/12 17:01:40 |
14楼: |
好厉害的大概
----------------------------------------------
-
|
作者: |
|
2014/3/15 10:37:03 |
15楼: |
突然有一种很羡慕的感觉!顶!! ---------- PS:想用什么样的APP,自己做,多好,不受限制!
----------------------------------------------
生命继续,生活继续!
|
|