List<UnicardSwipeDetail> unicardSwipeDetails = new ArrayList<UnicardSwipeDetail>();
        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:为一个类

解决方案 »

  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来实现。
      

  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;
    问题是现在数据传到服务端是空。谢谢!
      

  5.   

    list也不行吧 是个对象 对象传的是内存地址 肯定是错误的你可以改一下服务端方法 JAVA解析D端传递时将对象序列化
      

  6.   

    比如D端 将对象 按找JAVA数组序列化的格式进行转换或者转换成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;
      

  8.   

    上传调用的方法定义:  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.   

    非常谢谢 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; 
      

  11.   

    你可以让服务端看看 解析后的XML的内容 是否正确  仔细比较ID你这代码没问题  
      

  12.   

    是这边写法问题,我调试时可以看的到,当 向updateinfo 中的成员时赋值时,
    LL中的前面存放的数据的此字段值也变成此时的赋值
      

  13.   

     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;把对象释放去掉看看,应该是这的问题 你的对象添加到数组里 结果又释放掉了。而重新创建的新对象可能启用了内存里的碎片,就是之前的对象地址,所以引起数组里的元素全都只想同一地址。
      

  14.   

    非常感谢:jiap1723
    搞定了。结帐 了!