使用delphi 开发多层应用(十八)使用Basic4android 访问RTC 服务的二进制流(照片)

    上次写了b4a 通过xmlrpc 访问rtc 的远程服务,有网友询问如何通过b4a 访问RTC web 的二进制流,例如如何下载

服务器上的照片,其实访问二进制流和访问字符串类似,不同的地方是,由于是通过http 协议,对于二进制流,需要先转换成

base64 编码,到客户端后再再把base64 转换回去成二进制码,就可以了。(注:由于RTC 的bug,需要RTC 6.08 以上的版本)

   RTC服务器端的代码如下:

procedure TForm1.RtcFunction3Execute(Sender: TRtcConnection;
  Param: TRtcFunctionInfo; Result: TRtcValue);
  var
mys: TRtcFileStream;

  ss:Trtchugestring;
  r:Trtcvalue;
  s:string;
begin
   r:=Trtcvalue.Create;
   mys:=TRtcFileStream.Create();
   mys.Open('d:\test.jpg');
   s:= RtcBytesToString( Mime_EncodeEx(mys.Readex(-1),True) ); // 读文件并转换成base64
   result.asstring:=s;

end;

 Basci4android 里面的代码也很简单:

Sub button2_Click

	Dim out As OutputStream
	Dim b As Base64

	Dim bb () As Byte
	s=XMLRPC1.stringCall("getimg",x)
	bb=b.DecodeStob(s) ' 转换回去
	out = File.OpenOutput(File.DirRootExternal, "test.jpg", False)
	out.WriteBytes(bb,0,bb.Length)
	ImageView1.Bitmap=LoadBitmap (File.DirRootExternal, "test.jpg")

End Sub

 服务器和客户端都运行起来,就可以在android 上显示服务器上的照片了

ok.显示正常

2013年7月18日 补记:

上面使用存储卡转换了一下,如果没有存储卡就无法跑了,现在直接在内存中转换

 

Sub button2_Click

	Dim s    As String 

	Dim b As Base64

	Dim bb () As Byte

	Dim Bitmap1 As Bitmap
	Dim IpSt As InputStream

	s=XMLRPC1.stringCall("getimg",x)         bb=b.DecodeStob(s) ' 转换回去

       IpSt.InitializeFromBytesArray(bb, 0, bb.Length)
       Bitmap1.Initialize2(IpSt)

       ImageView1.Bitmap = Bitmap1

End Sub

 

 

 

 

时间: 2024-10-06 05:18:40

使用delphi 开发多层应用(十八)使用Basic4android 访问RTC 服务的二进制流(照片)的相关文章

使用delphi 开发多层应用(八)客户端更新数据到kbmMW服务器

   上次写了从kbmMW服务器给客户端返回数据,我们实现了数据的查询功能,但是当客户端对数据进行了增加.更新.删除的操作, 我们必须把这些操作返回到服务器端,并对后台数据库进行更新.kbmMW 可以很方便的实现这一功能,今天就做一个更新数据到 服务器的例子.    还是在昨天的基础上,我们要把客户端的信息更新到服务器上,首先需要在服务器端的Tkbmqueryservice 设置允许客户端更新 的权限,如图 即把allowclient 开头的几个属性都设为True; 同时为了保证客户端可以插入数

使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库

     delphi XE5 出来了,增加了android 的开发支持,另外增加了一个RESTClient 来支持访问REST 服务器. 这个功能非常强大,可以直接使用非常多的REST 服务器.同时也可以支持访问kbmmw 的web 服务器, 并完美的通过JSON支持使用kbmmw 的JSON 数据格式.使我们非常方便的在win32,win64,mac os,ios 和android 上访问kbmmw 的数据库.     首先我们建立一个可以返回JSON 的kbmmw web 服务器.这个可以

Android开发入门(十八)文件 18.4使用静态资源

除了可以在运行时去创建并使用文件,也可以在设计阶段把文件放在程序包中,这样一来就可以在运行时 去使用他们.举个例子,你想把一些帮助文件打包进程序,当用户需要的时候,就可以展示给他们看.在这 种情况下,应该把文件放在res/raw文件夹下面. 开发入门(十八)文件 18.4使用静态资源-伪静态规则 入门"> 想要在代码中使用这个文件,需要调用Activity的getResources()方法,返回一个Resources对象.然后 ,使用它的openRawResource()方法去打开res/

Xamarin.Android开发实践(十八)

原文:Xamarin.Android开发实践(十八) Xamarin.Android之SlidingMenu 一.前言 有位网友在评论中希望能够出个在Xamarin.Android下实现SlidingMenu效果的随笔,刚好昨天在观看官网示例项目的时候也看到这个SlidingMenu,但是最终的效果并不是我们所期待的,至此笔者就在官方的论坛中寻找,最后也成功的寻找到的答案,下面笔者将带领带领大家实现SlidingMenu.   二.准备工作 实现SlidingMenu重点是需要一个第三方的类库,

使用delphi 开发多层应用(三)Delphi常用多层框架介绍

    目前在delphi 开发多层应用的框架基本上集中在以下几种,每种开发框架都有自己的优缺点,没有最好的,大家可以根据 自己的实际需求选择相应框架,我把我本人在使用几种框架的体会与大家分享一下.如有不对之处,可以拍砖.      1. DELPHI 自身提供的DataSnap       从delphi 3 开始,delphi 自身就开始支持多层开发,后期的版本逐步加强三层开发功能,在delphi 6 以后, 把这一功能叫Datasnap,并且每个都有很多变化,包括DBExpress 的数据

使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器

      随着delphi XE4 的推出,开始真正意义上支持ios 的开发,由于目前kbmmw 还不完全支持ios 的开发,因此 无法直接使用kbmmw 的客户端访问kbmmw 的服务器(虽然kbmmw 也提供了C 的客户端,可以使用xcode连接 kbmmw的C 客户端来访问kbmmw 服务器,但是功能有限,而且要熟悉xcode),对于急着想在ios 使用kbmmw 服务的同学,可以先使用kbmmw 的webservice 方式访问kbmmw 服务器.   下面我就介绍以下如何在ios 访

使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

  从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能.细化了很多权限操作. 今天对这一块做个介绍.   要做一个认证管理,大概分为以下5步:        1.  定义你要保护的资源,一般是服务.函数,当然你只要不限麻烦,可以是任何东西:        2.  定义使用者(用户):        3.  定义角色,使用者通过角色与服务器打交道:        4.  定义角色或用户可以访问的资源(授权):        5. 定义认证与登录的限制(本步不是必须的

使用delphi 开发多层应用(十)安全访问服务器

      前面讲了如何建立和访问服务器,但是前面建的服务器都没有安全控制,这里有很大的安全问题,第一是任何人做一个客户端都可以都可以访问 服务器.第二是数据在网络传输过程中都是明码的,没有加密,使用网络侦听器就可以检测到传输的内容.这是一个标准的系统不允许的,今天就 讲一下如何安全的访问服务器.      首先我们需要使用加密来保证数据在网络上传输的安全,首先在服务器端我们加一个TkbmMWDCP2Crypt.这个是kbmMW 对DCP2Crypt的封装, DCP2Crypt 是一个用pasc

使用delphi 开发多层应用(十二)使用kbmMW webserver 返回JSON

     由于kbmMW 服务器与客户端交互是使用它的专用数据格式,因此与其它语言及平台相互访问的话就会有兼容问题, 为了最大化的利用kbmMW 服务器,从kbmMW 4.0 以后,其开始支持JSON 格式传递数据,其实就是可以通过 Webserver根据客户端的request 来返回对应的JSON串.     继续利用上次的webserver 的例子,在webservice 里面加一个TkbmMWIBDACQuery和TkbmMWJSONStreamFormat, 如图: 同时在代码里面添加以