DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jaytang
今日帖子: 0
在线用户: 1
导航: 论坛 -> 文档资料 斑竹:liumazi,ruralboy  
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/10/23 17:21:08
标题:
XE5安卓下调用公共平台信息服务的示例 浏览:4546
加入我的收藏
楼主: 1、概述
    互联网上有很多免费的公共服务资源可以利用,比如,飞信接口、微博接口、淘宝接口、地图服务、气象服务等等。我们在使用Delphi进行手机端应用程序开发时,就可以利用这些资源,实现各种自己实现起来比较难的、更为专业化的手机软件功能。 调用这种服务一般解决以下两个问题即可:

1)、公共服务的接口标准的熟悉
2)、结果的解析与表现

    下面,俺给出一个调用百度地图服务,实现地理信息在线查询的简单demo。


2、先看设计时界面
   搭建如下界面,拖入一个TIDHTTP控件,作为通用控件:
此帖子包含附件:
JPEG 图像
大小:102.9K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
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、看运行效果:
此帖子包含附件:
JPEG 图像
大小:71.3K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/10/23 17:24:27
2楼: 5、其他:

    XE5下缺少好用的Json解析控件,试了一下dbxjson类,但感觉不是很好用。所以,咱改造了QUickBurro桌面开发包中的QBJson单元,实现了在XE4、XE5下可以进行Json读写的单元MBJson。通过在本类中应用,效果不错。
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
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;
此帖子包含附件:
JPEG 图像
大小:83.4K
----------------------------------------------
樵夫的大马甲
作者:
男 nihaongy (nihao) ★☆☆☆☆ -
普通会员
2013/10/23 19:55:01
4楼: 顶一下,砍柴,樵夫,
----------------------------------------------
-相互学习,共同进步! 努力每一天,不能望山跑死马
发上等愿,结中等缘,享下等福;择高处立,寻平处住,向宽处行
作者:
男 zoujun3281 (无奈) ▲▲▲▲▲ -
普通会员
2013/10/24 19:37:09
5楼: 厉害
----------------------------------------------
delphi你妹
作者:
男 cloudysoul (cloudysoul) ★☆☆☆☆ -
普通会员
2013/10/24 21:22:44
6楼: 顶一个,太厉害了。
----------------------------------------------
-
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/10/24 22:22:45
7楼: 嘿嘿,小玩意而已。
此帖子包含附件:
JPEG 图像
大小:74.3K
----------------------------------------------
樵夫的大马甲
作者:
男 fxb0115 (青石) ★☆☆☆☆ -
盒子活跃会员
2013/10/25 11:48:50
8楼: @樵夫,  
请问你WebBrowser使用百度地图接口打开地图速度怎么样? 我的很慢呀。(网络正常)

谢谢!
----------------------------------------------
-
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/10/25 22:17:02
9楼: 我用wifi 和3g上网,速度都还行哦。
感觉百度地图服务马马虎虎过得去
----------------------------------------------
樵夫的大马甲
作者:
男 bigboy2050 (bigboy2050) ★☆☆☆☆ -
普通会员
2013/11/5 14:18:22
10楼: 樵夫大虾好厉害。。。
----------------------------------------------
kittyapp
作者:
男 cnhotel (cnhotel) ★☆☆☆☆ -
盒子活跃会员
2014/1/2 12:39:57
11楼: 好厉害的樵夫。
----------------------------------------------
-
作者:
男 linbren (lin) ★☆☆☆☆ -
盒子活跃会员
2014/2/10 19:53:55
12楼: 亲: MBJson能否共享下呀
----------------------------------------------
lin
作者:
男 andylee245 (hz) ★☆☆☆☆ -
普通会员
2014/2/27 11:42:32
13楼: 可以下载么?
----------------------------------------------
-
作者:
女 sally_baby (sally_baby) ▲▲▲▲△ -
普通会员
2014/3/12 17:01:40
14楼: 好厉害的大概
----------------------------------------------
-
作者:
男 dptflash (邓迪) ▲▲▲▲▲ -
普通会员
2014/3/15 10:37:03
15楼: 突然有一种很羡慕的感觉!顶!!
----------
PS:想用什么样的APP,自己做,多好,不受限制!
----------------------------------------------
生命继续,生活继续!
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行169.9219毫秒 RSS