【问题标题】:Android Groovy WebserviceAndroid Groovy Web 服务
【发布时间】:2011-04-22 16:46:51
【问题描述】:

仍然没有答案...有人有更好的吗?好的,这里有复杂的 2 部分问题。我有一个 Android 注册页面,它收集客户姓名、地址、电子邮件、电话等信息……当他们单击提交时,我想将该数据发送到使用 Groovy、grails 和 Hibernate 的 Web 服务,我正在创建。所以我的第一个问题是如何将数据发送到我的网络服务,可以举个例子吗?

一旦我在 Web 服务上发送了该数据,如何从我的 Groovy 脚本中将复杂的插入到 2 个表中,其中客户表具​​有地址表的 id?这些是旧表,因此标准域不起作用,因为 id 列名不是标准的“id”。并且关系是每个地址簿行一个客户行。

客户表有 id、name、email、username、password 和 address_id 地址表有id、地址、市州、邮编...

这是我的地址簿和客户域:

class AddressBook {
String entryStreetAddress
String entryStreetAddress2
String entryPostcode
String entryCity
Integer entryState
Integer entryCountryId

static mapping = {
    id column: "address_book_id"
    version false
}

 }

这里的旧客户表通知 customerDefaultAddressId 是以前域中的 address_book_id:

class Customers {
String customersFirstname
String customersMname
String customersLastname
String customersEmailAddress
Integer customersDefaultAddressId  //address id joins AddressBook to Customers
String customersTelephone
String customersUsername
String customersPassword

static mapping = {
    id column: "customers_id"
    version false
}
}

【问题讨论】:

    标签: android web-services hibernate grails groovy


    【解决方案1】:

    您可以使用HttpClient 将数据发送到您的网络服务。

    您应该决定您希望客户和地址簿之间的关系类型,并将其反映在您的域类中。例如,如果您想要客户和地址簿之间的双向多对一关系,您的域类将如下所示:

    class Customers {
        AddressBook address
        ...
    }
    
    class AddressBook {
        static belongsTo = [ customer:Customers ]
        ...
    }
    

    然后要在你的控制器中插入,你会做这样的事情:

    def customer = new Customers(param)
    customer.address = new AddressBook(param)
    customer.save()
    

    假设您引用了您的活动中的 URL 编码字段 成员变量中的小部件,请执行以下操作:

    List<NameValuePair> param = new ArrayList<NameValuePair>();
    param.add(new BasicNameValuePair("firstname", mFirstNameTextEdit.getText()));
    param.add(new BasicNameValuePair("gender", (String) mGenderSpinner.getSelectedItem()));
    // ... and so on for each widget
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(param, "UTF-8");
    HttpPost post = new HttpPost("http://your.webservice.url");
    post.setEntity(entity);
    

    【讨论】:

    • 我尝试测试您拥有的域,但错误提示...“'字段列表'中的未知列 'this_.address_book_id'” 好的,但我该如何发送数据。我理解使用 HTTPClient 接收 JSON 数据,但不知道数据应该如何发送到 Groovy 端。看来我要设置参数,呃,参数不少,至少20个左右。
    • 我会在 HTTP POST(或 PUT)中将数据作为 url 编码的表单数据发送。这样,您的 Grails 控制器就可以访问参数哈希中的字段。
    • 那么你如何用 15 个不同的 textviews 和 spinners 对一个 android 活动进行 url 形式编码?
    • 我在答案中添加了一个 URL 编码小部件值的示例。
    • 答案仍然对我不起作用,因为我不断收到“'字段列表'中的未知列'this_.address_book_id'”
    【解决方案2】:

    好的,因为没有人回答这个问题,我会自己回答。一旦通过将索引名称命名为与列名称相同的方式在 JSON 对象中正确设置数据,我所做的就相当容易了。我能够添加客户表对象和地址表对象的混合。调用 URI groovy 脚本后,您可以轻松地将其保存到每个表中。这是点击保存按钮时在 OnClick 方法中 Android Activity 中的 JSON 对象设置:

    public void onClick(View v) {
    .......
    
    JSONObject cust = new JSONObject();
        try {
            cust.put("customersFirstname", customer.getCustomers_firstname());
            cust.put("customersMname", customer.getCustomers_mname());
            cust.put("customersLastname", customer.getCustomers_lastname());
            cust.put("customersEmailAddress", customer.getCustomers_email_address());
            cust.put("customersTelephone", customer.getCustomers_telephone());
            cust.put("customersUsername", customer.getCustomers_username());
            cust.put("customersPassword", customer.getCustomers_password());
            cust.put("customersNewsletter", 0);
    
            cust.put("entryFirstname", customer.getCustomers_firstname());
            cust.put("entryLastname", customer.getCustomers_lastname());
            cust.put("entryStreetAddress", address.getEntryStreetAddress());
            cust.put("entryStreetAddress2", address.getEntryStreetAddress2());
            cust.put("entryCity", address.getEntryCity());
            cust.put("entryState", address.getEntryState());
            cust.put("entryPostcode", address.getEntryPostcode());
            cust.put("entryCountryId", address.getEntryCountryId());
            cust.put("entryZoneId", address.getEntryCountryId());
    
            PostJson.sendJSON("URL/webservices", cust);
    
    .........
    }
    

    然后在我的 web 服务的 Groovy 方面,我为保存表的客户信息所做的一切是:

    def input = request.JSON
    def instance = new Customers(input)
    instance.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      相关资源
      最近更新 更多