UnicardSwipeDetail u = new UnicardSwipeDetail();
u.setBalance(1111);
u.setCardNumber("1111");
u.setId("1111");
u.setSchoolId("130011");
u.setStudentId("1111");
u.setSwipeAmount(1111);
u.setSwipeTime(new Date());
u.setSwipeType(1);
unicardSwipeDetails.add(u);
service.unicardSwipeDetailSyncService(unicardSwipeDetails.toArray(new UnicardSwipeDetail[0]), key);
UnicardSwipeDetail:为一个类
15 个解决方案
#1
其实很简单
就是一个tlist和一个类的操作,完全帮你敲了,恐怕你什么也学不到,给你两个链接,稍微看下就懂了
tlist的操作
http://anony3721.blog.163.com/blog/static/511974201082443238978/
类的操作
http://www.cnblogs.com/hi-ilovefeng/archive/2006/06/15/426180.html
另外补充下,delphi没有垃圾回收器,用完后记得要释放
#2
感觉转起来不伦不类的
JAVA服务 起码你要改成DELPHI 其次D也不支持简单对象
DELPHI版本是多少?如果是XE的话还有可能 通过JSON来实现。
JAVA服务 起码你要改成DELPHI 其次D也不支持简单对象
DELPHI版本是多少?如果是XE的话还有可能 通过JSON来实现。
#3
刚才还真没注意,最后还有这么一句................那好吧,我路过的说.......
service.unicardSwipeDetailSyncService(unicardSwipeDetails.toArray(new UnicardSwipeDetail[0]), key);
#4
这是调用别个的一个JAVA 写的WEBserver ,这是JAVA的写法, 现在DELPHI中调用参数传不上去 为空:附代码:
procedure TForm1.Button2Click(Sender: TObject);
var
Iservice: XxtDataSyncServiceImpl;
B, c, TempLocal: WideString;
XMLDoc: IXMLDocument;
UPDateinfo: UnicardSwipeDetail;
LL: TLIST;
begin
Iservice := HTTPRIO1 as XxtDataSyncServiceImpl
updateinfo := UnicardSwipeDetail.Create
updateinfo.id := '1'; //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
updateinfo.swipeType := 1; //刷卡类型
// updateinfo[I].swipeTime := strtodatetime(formatdatetime('yyyy-mm-dd hh:mm:ss', now));
updateinfo.swipeAmount := 5; //刷卡金额 全部整形?
updateinfo.balance := 10; //余额
ll := tlist.Create();
ll.Add(updateinfo);
//向SERVER提交数据
Iservice.unicardSwipeDetailSyncService(ll[0], '8117f0657e022053f46895aff1b998e2');
LL.Destroy;
问题是现在数据传到服务端是空。谢谢!
procedure TForm1.Button2Click(Sender: TObject);
var
Iservice: XxtDataSyncServiceImpl;
B, c, TempLocal: WideString;
XMLDoc: IXMLDocument;
UPDateinfo: UnicardSwipeDetail;
LL: TLIST;
begin
Iservice := HTTPRIO1 as XxtDataSyncServiceImpl
updateinfo := UnicardSwipeDetail.Create
updateinfo.id := '1'; //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
updateinfo.swipeType := 1; //刷卡类型
// updateinfo[I].swipeTime := strtodatetime(formatdatetime('yyyy-mm-dd hh:mm:ss', now));
updateinfo.swipeAmount := 5; //刷卡金额 全部整形?
updateinfo.balance := 10; //余额
ll := tlist.Create();
ll.Add(updateinfo);
//向SERVER提交数据
Iservice.unicardSwipeDetailSyncService(ll[0], '8117f0657e022053f46895aff1b998e2');
LL.Destroy;
问题是现在数据传到服务端是空。谢谢!
#5
list也不行吧 是个对象 对象传的是内存地址 肯定是错误的
你可以改一下服务端方法 JAVA解析
D端传递时将对象序列化
你可以改一下服务端方法 JAVA解析
D端传递时将对象序列化
#6
比如D端 将对象 按找JAVA数组序列化的格式进行转换
或者转换成JSON格式
实在不行自己订一套 简单的
或者转换成JSON格式
实在不行自己订一套 简单的
#7
请各位多支支招啊,服务端那边很牛,不改,没办法,郁闷
这是接口中类的定义:
UnicardSwipeDetail = class(TRemotable)
private
Fbalance: Integer;
FcardNumber: WideString;
Fid: WideString;
FschoolId: WideString;
FstudentId: WideString;
FswipeAmount: Integer;
FswipeTime: TXSDateTime;
FswipeType: Integer;
public
destructor Destroy; override;
published
property balance: Integer read Fbalance write Fbalance;
property cardNumber: WideString read FcardNumber write FcardNumber;
property id: WideString read Fid write Fid;
property schoolId: WideString read FschoolId write FschoolId;
property studentId: WideString read FstudentId write FstudentId;
property swipeAmount: Integer read FswipeAmount write FswipeAmount;
property swipeTime: TXSDateTime read FswipeTime write FswipeTime;
property swipeType: Integer read FswipeType write FswipeType;
end;
ArrayOf_tns2_UnicardSwipeDetail = array of UnicardSwipeDetail;
这是接口中类的定义:
UnicardSwipeDetail = class(TRemotable)
private
Fbalance: Integer;
FcardNumber: WideString;
Fid: WideString;
FschoolId: WideString;
FstudentId: WideString;
FswipeAmount: Integer;
FswipeTime: TXSDateTime;
FswipeType: Integer;
public
destructor Destroy; override;
published
property balance: Integer read Fbalance write Fbalance;
property cardNumber: WideString read FcardNumber write FcardNumber;
property id: WideString read Fid write Fid;
property schoolId: WideString read FschoolId write FschoolId;
property studentId: WideString read FstudentId write FstudentId;
property swipeAmount: Integer read FswipeAmount write FswipeAmount;
property swipeTime: TXSDateTime read FswipeTime write FswipeTime;
property swipeType: Integer read FswipeType write FswipeType;
end;
ArrayOf_tns2_UnicardSwipeDetail = array of UnicardSwipeDetail;
#8
上传调用的方法定义:
function unicardSwipeDetailSyncService(const unicardSwipeDetails: ArrayOf_tns2_UnicardSwipeDetail; const key: WideString): ArrayOf_soapenc_string; stdcall;
function unicardSwipeDetailSyncService(const unicardSwipeDetails: ArrayOf_tns2_UnicardSwipeDetail; const key: WideString): ArrayOf_soapenc_string; stdcall;
#9
你试试这样子吧 我不是很确定
procedure TForm1.Button2Click(Sender: TObject);
var
Iservice: XxtDataSyncServiceImpl;
B, c, TempLocal: WideString;
XMLDoc: IXMLDocument;
UPDateinfo: UnicardSwipeDetail;
LL: ArrayOf_tns2_UnicardSwipeDetail;
begin
SetLength(LL,1);
Iservice := HTTPRIO1 as XxtDataSyncServiceImpl
updateinfo := UnicardSwipeDetail.Create
updateinfo.id := '1'; //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
updateinfo.swipeType := 1; //刷卡类型
// updateinfo[I].swipeTime := strtodatetime(formatdatetime('yyyy-mm-dd hh:mm:ss', now));
updateinfo.swipeAmount := 5; //刷卡金额 全部整形?
updateinfo.balance := 10; //余额
LL[0] := updateinfo;
//向SERVER提交数据
Iservice.unicardSwipeDetailSyncService(LL, '8117f0657e022053f46895aff1b998e2');
end;
#10
谢谢,楼上的兄弟,我先试试!
#11
非常谢谢 jiap1723 兄的建议,这样写数据就可以传上去了。
但还有小问题,如果多笔:怎么ll 中的10笔数据都 变成最后一次的数据了 ,
SetLength(ll, 10);
for i := 0 to 9 do
begin
updateinfo := UnicardSwipeDetail.Create;
updateinfo.id := inttostr(I); //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
ll[i] := updateinfo;
updateinfo.Destroy;
end;
但还有小问题,如果多笔:怎么ll 中的10笔数据都 变成最后一次的数据了 ,
SetLength(ll, 10);
for i := 0 to 9 do
begin
updateinfo := UnicardSwipeDetail.Create;
updateinfo.id := inttostr(I); //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
ll[i] := updateinfo;
updateinfo.Destroy;
end;
#12
你可以让服务端看看 解析后的XML的内容 是否正确 仔细比较ID
你这代码没问题
你这代码没问题
#13
是这边写法问题,我调试时可以看的到,当 向updateinfo 中的成员时赋值时,
LL中的前面存放的数据的此字段值也变成此时的赋值
LL中的前面存放的数据的此字段值也变成此时的赋值
#14
SetLength(ll, 10);
for i := 0 to 9 do
begin
updateinfo := UnicardSwipeDetail.Create;
updateinfo.id := inttostr(I); //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
ll[i] := updateinfo;
end;
把对象释放去掉看看,应该是这的问题 你的对象添加到数组里 结果又释放掉了。而重新创建的新对象可能启用了内存里的碎片,就是之前的对象地址,所以引起数组里的元素全都只想同一地址。
for i := 0 to 9 do
begin
updateinfo := UnicardSwipeDetail.Create;
updateinfo.id := inttostr(I); //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
ll[i] := updateinfo;
end;
把对象释放去掉看看,应该是这的问题 你的对象添加到数组里 结果又释放掉了。而重新创建的新对象可能启用了内存里的碎片,就是之前的对象地址,所以引起数组里的元素全都只想同一地址。
#15
非常感谢:jiap1723
搞定了。结帐 了!
搞定了。结帐 了!
#1
其实很简单
就是一个tlist和一个类的操作,完全帮你敲了,恐怕你什么也学不到,给你两个链接,稍微看下就懂了
tlist的操作
http://anony3721.blog.163.com/blog/static/511974201082443238978/
类的操作
http://www.cnblogs.com/hi-ilovefeng/archive/2006/06/15/426180.html
另外补充下,delphi没有垃圾回收器,用完后记得要释放
#2
感觉转起来不伦不类的
JAVA服务 起码你要改成DELPHI 其次D也不支持简单对象
DELPHI版本是多少?如果是XE的话还有可能 通过JSON来实现。
JAVA服务 起码你要改成DELPHI 其次D也不支持简单对象
DELPHI版本是多少?如果是XE的话还有可能 通过JSON来实现。
#3
刚才还真没注意,最后还有这么一句................那好吧,我路过的说.......
service.unicardSwipeDetailSyncService(unicardSwipeDetails.toArray(new UnicardSwipeDetail[0]), key);
#4
这是调用别个的一个JAVA 写的WEBserver ,这是JAVA的写法, 现在DELPHI中调用参数传不上去 为空:附代码:
procedure TForm1.Button2Click(Sender: TObject);
var
Iservice: XxtDataSyncServiceImpl;
B, c, TempLocal: WideString;
XMLDoc: IXMLDocument;
UPDateinfo: UnicardSwipeDetail;
LL: TLIST;
begin
Iservice := HTTPRIO1 as XxtDataSyncServiceImpl
updateinfo := UnicardSwipeDetail.Create
updateinfo.id := '1'; //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
updateinfo.swipeType := 1; //刷卡类型
// updateinfo[I].swipeTime := strtodatetime(formatdatetime('yyyy-mm-dd hh:mm:ss', now));
updateinfo.swipeAmount := 5; //刷卡金额 全部整形?
updateinfo.balance := 10; //余额
ll := tlist.Create();
ll.Add(updateinfo);
//向SERVER提交数据
Iservice.unicardSwipeDetailSyncService(ll[0], '8117f0657e022053f46895aff1b998e2');
LL.Destroy;
问题是现在数据传到服务端是空。谢谢!
procedure TForm1.Button2Click(Sender: TObject);
var
Iservice: XxtDataSyncServiceImpl;
B, c, TempLocal: WideString;
XMLDoc: IXMLDocument;
UPDateinfo: UnicardSwipeDetail;
LL: TLIST;
begin
Iservice := HTTPRIO1 as XxtDataSyncServiceImpl
updateinfo := UnicardSwipeDetail.Create
updateinfo.id := '1'; //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
updateinfo.swipeType := 1; //刷卡类型
// updateinfo[I].swipeTime := strtodatetime(formatdatetime('yyyy-mm-dd hh:mm:ss', now));
updateinfo.swipeAmount := 5; //刷卡金额 全部整形?
updateinfo.balance := 10; //余额
ll := tlist.Create();
ll.Add(updateinfo);
//向SERVER提交数据
Iservice.unicardSwipeDetailSyncService(ll[0], '8117f0657e022053f46895aff1b998e2');
LL.Destroy;
问题是现在数据传到服务端是空。谢谢!
#5
list也不行吧 是个对象 对象传的是内存地址 肯定是错误的
你可以改一下服务端方法 JAVA解析
D端传递时将对象序列化
你可以改一下服务端方法 JAVA解析
D端传递时将对象序列化
#6
比如D端 将对象 按找JAVA数组序列化的格式进行转换
或者转换成JSON格式
实在不行自己订一套 简单的
或者转换成JSON格式
实在不行自己订一套 简单的
#7
请各位多支支招啊,服务端那边很牛,不改,没办法,郁闷
这是接口中类的定义:
UnicardSwipeDetail = class(TRemotable)
private
Fbalance: Integer;
FcardNumber: WideString;
Fid: WideString;
FschoolId: WideString;
FstudentId: WideString;
FswipeAmount: Integer;
FswipeTime: TXSDateTime;
FswipeType: Integer;
public
destructor Destroy; override;
published
property balance: Integer read Fbalance write Fbalance;
property cardNumber: WideString read FcardNumber write FcardNumber;
property id: WideString read Fid write Fid;
property schoolId: WideString read FschoolId write FschoolId;
property studentId: WideString read FstudentId write FstudentId;
property swipeAmount: Integer read FswipeAmount write FswipeAmount;
property swipeTime: TXSDateTime read FswipeTime write FswipeTime;
property swipeType: Integer read FswipeType write FswipeType;
end;
ArrayOf_tns2_UnicardSwipeDetail = array of UnicardSwipeDetail;
这是接口中类的定义:
UnicardSwipeDetail = class(TRemotable)
private
Fbalance: Integer;
FcardNumber: WideString;
Fid: WideString;
FschoolId: WideString;
FstudentId: WideString;
FswipeAmount: Integer;
FswipeTime: TXSDateTime;
FswipeType: Integer;
public
destructor Destroy; override;
published
property balance: Integer read Fbalance write Fbalance;
property cardNumber: WideString read FcardNumber write FcardNumber;
property id: WideString read Fid write Fid;
property schoolId: WideString read FschoolId write FschoolId;
property studentId: WideString read FstudentId write FstudentId;
property swipeAmount: Integer read FswipeAmount write FswipeAmount;
property swipeTime: TXSDateTime read FswipeTime write FswipeTime;
property swipeType: Integer read FswipeType write FswipeType;
end;
ArrayOf_tns2_UnicardSwipeDetail = array of UnicardSwipeDetail;
#8
上传调用的方法定义:
function unicardSwipeDetailSyncService(const unicardSwipeDetails: ArrayOf_tns2_UnicardSwipeDetail; const key: WideString): ArrayOf_soapenc_string; stdcall;
function unicardSwipeDetailSyncService(const unicardSwipeDetails: ArrayOf_tns2_UnicardSwipeDetail; const key: WideString): ArrayOf_soapenc_string; stdcall;
#9
你试试这样子吧 我不是很确定
procedure TForm1.Button2Click(Sender: TObject);
var
Iservice: XxtDataSyncServiceImpl;
B, c, TempLocal: WideString;
XMLDoc: IXMLDocument;
UPDateinfo: UnicardSwipeDetail;
LL: ArrayOf_tns2_UnicardSwipeDetail;
begin
SetLength(LL,1);
Iservice := HTTPRIO1 as XxtDataSyncServiceImpl
updateinfo := UnicardSwipeDetail.Create
updateinfo.id := '1'; //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
updateinfo.swipeType := 1; //刷卡类型
// updateinfo[I].swipeTime := strtodatetime(formatdatetime('yyyy-mm-dd hh:mm:ss', now));
updateinfo.swipeAmount := 5; //刷卡金额 全部整形?
updateinfo.balance := 10; //余额
LL[0] := updateinfo;
//向SERVER提交数据
Iservice.unicardSwipeDetailSyncService(LL, '8117f0657e022053f46895aff1b998e2');
end;
#10
谢谢,楼上的兄弟,我先试试!
#11
非常谢谢 jiap1723 兄的建议,这样写数据就可以传上去了。
但还有小问题,如果多笔:怎么ll 中的10笔数据都 变成最后一次的数据了 ,
SetLength(ll, 10);
for i := 0 to 9 do
begin
updateinfo := UnicardSwipeDetail.Create;
updateinfo.id := inttostr(I); //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
ll[i] := updateinfo;
updateinfo.Destroy;
end;
但还有小问题,如果多笔:怎么ll 中的10笔数据都 变成最后一次的数据了 ,
SetLength(ll, 10);
for i := 0 to 9 do
begin
updateinfo := UnicardSwipeDetail.Create;
updateinfo.id := inttostr(I); //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
ll[i] := updateinfo;
updateinfo.Destroy;
end;
#12
你可以让服务端看看 解析后的XML的内容 是否正确 仔细比较ID
你这代码没问题
你这代码没问题
#13
是这边写法问题,我调试时可以看的到,当 向updateinfo 中的成员时赋值时,
LL中的前面存放的数据的此字段值也变成此时的赋值
LL中的前面存放的数据的此字段值也变成此时的赋值
#14
SetLength(ll, 10);
for i := 0 to 9 do
begin
updateinfo := UnicardSwipeDetail.Create;
updateinfo.id := inttostr(I); //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
ll[i] := updateinfo;
end;
把对象释放去掉看看,应该是这的问题 你的对象添加到数组里 结果又释放掉了。而重新创建的新对象可能启用了内存里的碎片,就是之前的对象地址,所以引起数组里的元素全都只想同一地址。
for i := 0 to 9 do
begin
updateinfo := UnicardSwipeDetail.Create;
updateinfo.id := inttostr(I); //充值记录ID
updateinfo.schoolId := '000001'; //学校ID
updateinfo.studentId := '1'; //学生ID
updateinfo.cardNumber := '000001'; //卡号
ll[i] := updateinfo;
end;
把对象释放去掉看看,应该是这的问题 你的对象添加到数组里 结果又释放掉了。而重新创建的新对象可能启用了内存里的碎片,就是之前的对象地址,所以引起数组里的元素全都只想同一地址。
#15
非常感谢:jiap1723
搞定了。结帐 了!
搞定了。结帐 了!