2012-06-15 6 views
0

Мой первый пост здесь :)iPhone на Android NSMutableDictionary NSArray в HashMap ArrayList

У меня летом работу делает немного кодирования - я определенно не про, но!

Я конвертирую это приложение для iPhone в Android, это почти сделано. Просто пытаюсь преобразовать эту пьесу.

Массив участников передается на сервер через JSON. Это для меня, в Android, похоже, что это будет массив HashMaps. Это верно?

Вот Objective 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; } 

Edit: Дальнейшее обновление:

теперь у меня есть мой массив HashMaps разбора в строку 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

Не работает. Сервер сообщает: «Сервер обнаружил ошибку при обработке запроса. Сообщение об исключении -« Ожидание состояния «Элемент» .. Обнаружено «Текст» с именем «», пространство имен «.». Подробнее см. Журналы сервера. » – JaboJG

+0

Ожидается, что сервер JSON: [DataMember] public Player [] MemberantIds {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 код генерирует то же самое.

EDIT:

Код для ручной генерации JSON в Java будет выглядеть примерно так:

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 = Тест Firstname, НомерТелефона = номер теста, [email protected]}]"} является то, что генерируется в момент – JaboJG

+0

@JaboJG Тогда это твоя проблема. 'json.put()' не работает, как вы ожидали. –

+0

ОК, спасибо. Я собираюсь исследовать и посмотреть, сможет ли GSON это сделать. – JaboJG

Смежные вопросы