2011-04-22 56 views
1

仍然沒有答案...任何人都有更好的東西?好的,複雜的2部分問題在這裏。我有一個收集信息客戶名稱,地址,電子郵件,電話......的Android註冊頁面。當他們單擊提交時,我想將這些數據發送到一個web服務,即使用Groovy,grails和Hibernate創建。所以我的第一個問題是如何將這些數據發送到我的web服務,可以舉一個例子嗎?Android Groovy Webservice

一旦我在Web服務上發送了這些數據,我該如何從我的Groovy腳本中創建一個複雜的插入到兩個表中,其中客戶表具​​有地址表的ID?這些都是遺留表格,所以標準域不起作用,因爲id列名不是標準的「id」。並且該關係是每個address_book行的一個客戶行。

客戶表有ID,姓名,電子郵件,用戶名,密碼和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 
} 
} 

回答

0

好,因爲沒有人回答這個問題,我會回答我的問題。一旦我在JSON對象中正確設置數據,通過將索引名稱命名爲與列名稱相同的名稱,我所做的工作相當簡單。我能夠添加客戶表對象和地址表對象的混合。一旦你調用URI groovy腳本,你可以輕鬆地保存到每個表中。這裏是JSON對象建立在Android活動在onclick方法擊中保存按鈕時:

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); 

......... 
} 

然後在Groovy的一側爲我的web服務我做的一切,以節省表的客戶信息是:

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

您可以ü se HttpClient將數據發送到您的Web服務。

您應該決定客戶和地址簿之間想要什麼樣的關係,並將其反映在您的域類中。例如,如果你希望客戶和通訊錄之間的雙向多到一的關係,你的領域類會是什麼樣子:

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); 
+0

我試着測試你有什麼域名和它的錯誤說...「字段列表」中的未知列'this_.address_book_id'「好吧,但我該如何發送數據。接收JSON數據我理解使用HTTPClient,但不瞭解數據應該如何將其發送到Groovy端。看起來像我必須設置參數,呃這就是至少20個參數的許多參數。 – JPM 2011-04-22 23:40:05

+0

我會發送一個HTTP POST(或PUT)中的數據作爲URL編碼形式的數據。這樣,您的Grails控制器就可以訪問param散列中的字段。 – 2011-04-22 23:59:48

+0

那麼你如何使用15種不同的textviews和spinners來編碼android活動? – JPM 2011-04-23 02:09:36