2012-06-15 51 views
0

我的第一篇在這裏:)iPhone到Android的NSMutableDictionary的NSArray到HashMap的ArrayList中

我有一個暑假作業做了一些編碼的 - 我絕對不是一個職業球員,但!

我將此iPhone應用程序轉換爲Android,即將完成。只是掙扎轉換這一塊。

'參與者'數組通過JSON傳遞給服務器。 這對我來說,在Android中,看起來像是一個HashMap的數組。那是對的嗎?

這裏是客觀C:

NSMutableArray *participants = [[NSMutableArray alloc] init]; 

NSArray *listOfParticipants = [[game getListOfGameParticipants]allValues]; 

for (Player *playerObj in listOfParticipants) 
{ 
    NSMutableDictionary *playerToAdd = [[NSMutableDictionary alloc] init]; 
    if ([playerObj.email length] == 0) { 
     [playerToAdd setValue:playerObj.phoneNumber forKey:@"Id"]; 
    } 
    else 
    { 
     [playerToAdd setValue:playerObj.email forKey:@"Id"]; 
    } 

    [playerToAdd setValue:playerObj.firstName forKey:@"FirstName"]; 
    [playerToAdd setValue:playerObj.lastName forKey:@"LastName"]; 
    [playerToAdd setValue:playerObj.phoneNumber forKey:@"PhoneNumber"]; 

    [participants addObject:playerToAdd]; 

    [playerToAdd release]; 
} 

的getListOfGameParticipants是:

- (NSDictionary*) getListOfGameParticipants 
{ 
return participants ; 
} 

和Android的代碼,我已經嘗試是:

ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>(); 
Map<String, String> playersObject = new HashMap<String, String>(); 
      playersObject.put("Id", "[email protected]"); 
      playersObject.put("FirstName", "Test Firstname"); 
      playersObject.put("LastName", "Test Surname"); 
      playersObject.put("PhoneNumber", "Test Number"); 
      list.add(playersObject); 
json.put("ParticipantIds", list); 

請幫助:)

編輯:它不起作用。服務器報告回:

The server encountered an error processing the request. The exception message is 'Expecting state 'Element'.. Encountered 'Text' with name '', namespace ''. '. See server logs for more details. 

預期的數據類型是:

[DataMember] 
public Player[] ParticipantIds { get; set; } 

編輯:進一步更新:

現在我有我的包含HashMap解析到一個JSON字符串數組中的好形式。我需要將該JSON字符串解析爲JSONObject並將該JSONObject放入JSONArray中。

下面的代碼不起作用:

Map<String, String> playersObject = new HashMap<String, String>(); 
      playersObject.put("PhoneNumber", "TestNumber"); 
      playersObject.put("Id", "[email protected]"); 
      playersObject.put("FirstName", "Test Firstname"); 
      playersObject.put("LastName", "Test Surname"); 
      ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>(); 
      list.add(playersObject); 
      String jsonValue = org.json.simple.JSONValue.toJSONString(list); 
      JSONObject hashMapObject = new JSONObject(); 
      hashMapObject.getString(jsonValue); 
      JSONArray hashMapArray = new JSONArray(jsonValue); 
      hashMapArray.put(hashMapObject); 

它給人的錯誤:

org.json.JSONException: No value for [{"LastName":"Test Surname","FirstName":"Test Firstname","Id":"[email protected]","PhoneNumber":"TestNumber"}] 

幫助!

+0

那麼問題是什麼?如果它起作用,它會起作用,如果它沒有告訴我們什麼是錯的,我們可以找出如何解決它。我是一名iOS開發人員,因此我不知道Android代碼是否正確,但對我來說看起來不錯。 –

+0

它不起作用。服務器報告「服務器在處理請求時遇到錯誤,異常消息是'Expecting state'Element'..遇到'Text',名稱爲'',命名空間爲'。'。請參閱服務器日誌以獲取更多詳細信息。 – JaboJG

+0

服務器預期的JSON是: [DataMember] public Player [] ParticipantIds {get;組; } – JaboJG

回答

0

Android代碼與iPhone代碼不同,但就數據結構而言似乎是正確的。只需比較兩種方法生成的JSON,你就會知道什麼是錯的。

這是JSON代碼的iPhone正在生成:

[ 
    { 
     "Id" : "value", 
     "FirstName" : "value", 
     "LastName" : "value", 
     "PhoneNumber" : "value" 
    }, 
    { 
     "Id" : "value", 
     "FirstName" : "value", 
     "LastName" : "value", 
     "PhoneNumber" : "value" 
    }, 
    { 
     "Id" : "value", 
     "FirstName" : "value", 
     "LastName" : "value", 
     "PhoneNumber" : "value" 
    } 
] 

只需確保Android的代碼生成同樣的事情。

編輯:

在Java手動生成JSON看起來是這樣的代碼:

String json = "["; 

for (Player player : participants) { 
    json += "{"; 
    json += "\"Id\":\"" + (player.email.length() > 0 ? player.email : player.phoneNumber) + "\","; 
    json += "\"FirstName\":\"" + player.firstName + "\","; 
    json += "\"LastName\":\"" + player.lastName + "\","; 
    json += "\"PhoneNumber\":\"" + player.phoneNumber + "\""; 
    json += "},"; 
} 

json = json.substring(0, json.length()-1) + "]"; 

我不寫Java代碼,很多時候,但我覺得上面產生相同JSON作爲您發佈的Objective-C代碼。這不是縮進的,但我不認爲服務器會在意。

+0

{ 「ParticipantIds」: 「[{名字=測試姓, 姓=測試FIRSTNAME, ******中國=試驗數, [email protected]}]」} 是在瞬間產生什麼 – JaboJG

+0

@JaboJG那就是你的問題。 'json.put()'不能像你期望的那樣工作。 –

+0

好的,謝謝。我要去調查並看看GSON是否可以做到這一點。 – JaboJG