#ios
#iOS
Вопрос:
Я пытаюсь сопоставить некоторый код Android с версией iOS. Я не могу получить код Android для сборки, но загружаю apt, и, похоже, он работает, я вообще ничего не вижу в журналах сервера, ничего, nada, nil, zilch, и сервер просто истекает по запросу. Однако я могу успешно общаться с другими конечными точками.
Я как бы застрял на этом этапе. Внутренний сервер, поддерживаемый neo4j.
С данными изображения есть ли правильный способ их отправки??? Я пробовал использовать шестнадцатеричную строку NSData непосредственно из файла в качестве закомментированного кода, я пробовал NSData с кодировкой Base64 с (out) разрывами строк и всеми их вариантами.
Соответствует ли код Android коду iOS …? Отмечая, что я бесконечно с ним возился.
Код Android:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(Constants.WebServiceEndPoints.IMAGE_ADD_URL);
org.apache.http.HttpResponse response;
PostItemDto postItemDto = new PostItemDto();
try {
createFingerprint(postItem);
File image = new File(postItem.binaryUri.getPath());
FileInputStream fis = new FileInputStream(image);
InputStreamBody isb = new InputStreamBody(new ByteArrayInputStream(IOUtils.toByteArray(fis)), FILE_DATA);
MultipartEntity multipartEntity = new MultipartEntity();
multipartEntity.addPart(FILE_DATA, isb);
multipartEntity.addPart("apiKey", new StringBody(API_KEY));
multipartEntity.addPart(LOGIN_ID, new StringBody(postItem.loginId));
multipartEntity.addPart(TITLE, new StringBody(postItem.title));
multipartEntity.addPart(DESCRIPTION, new StringBody(postItem.description));
multipartEntity.addPart(POST_TYPE, new StringBody(String.valueOf(postItem.postType)));
multipartEntity.addPart(RATING, new StringBody(String.valueOf(postItem.rating)));
multipartEntity.addPart(LAT, new StringBody(String.valueOf(postItem.lat)));
multipartEntity.addPart(LON, new StringBody(String.valueOf(postItem.lon)));
multipartEntity.addPart(TIME, new StringBody(String.valueOf(postItem.time)));
multipartEntity.addPart(FINGERPRINT, new StringBody(String.valueOf(postItem.fingerprint)));
httpPost.setEntity(multipartEntity);
response = httpClient.execute(httpPost);
final InputStream responseStream = response.getEntity().getContent();
String responseString = IOUtils.toString(responseStream);
Код iOS:
[manager POST:serviceURL parameters:orderedDict constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
{
NSString *outputPostImageStr = [imageData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
// [formData appendPartWithFileData:imageData name:nameStr fileName:fileName mimeType:mimeTypeString ];
[formData appendPartWithFormData:outputPostImageStr name:@"postImage" ];
[formData appendPartWithFormData:[orderedDict valueForKey:@"apiKey" ] name:@"apiKey" ];
[formData appendPartWithFormData:[NIL_TO_STRING(loginId) dataUsingEncoding:NSUTF8StringEncoding] name:@"loginId" ];
[formData appendPartWithFormData:[NIL_TO_STRING(post.title) dataUsingEncoding:NSUTF8StringEncoding] name:@"title" ];
[formData appendPartWithFormData:[NIL_TO_STRING(post.descriptionStr) dataUsingEncoding:NSUTF8StringEncoding ] name:@"description" ];
[formData appendPartWithFormData:[NIL_TO_STRING(post.postType) dataUsingEncoding:NSUTF8StringEncoding ] name:@"postType" ];
[formData appendPartWithFormData:[[post.rating stringValue] dataUsingEncoding:NSUTF8StringEncoding ] name:@"rating" ];
[formData appendPartWithFormData:[[[NSNumber numberWithDouble:userLocation.coordinate.latitude] stringValue] dataUsingEncoding:NSUTF8StringEncoding ] name:@"lat" ];
[formData appendPartWithFormData:[[[NSNumber numberWithDouble:userLocation.coordinate.longitude] stringValue] dataUsingEncoding:NSUTF8StringEncoding ] name:@"lon" ];
[formData appendPartWithFormData:[[self timeSince1970] dataUsingEncoding:NSUTF8StringEncoding ] name:@"time" ];
[formData appendPartWithFormData:[ [orderedDict valueForKey:@"fingerprint"] dataUsingEncoding:NSUTF8StringEncoding ] name:@"fingerprint" ];
}
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
successBlock(YES);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
[self showConnectionError];
DLog(@"error: %@", error);
errorBlock(error);
}];
Комментарии:
1. Я вижу начало блока try в вашем коде Android; вы случайно не получаете исключение?
2. спасибо за комментарий, но нет, у меня также есть попытка / уловка вокруг кода iOS.. И уловы регистрируют все, что угодно.. Я думаю, что на стороне сервера происходит какая-то недокументированная черная магия, которая работает только с версией Android. Это код Android, который работает с iOS, просто истекает время ожидания без сообщения журнала сервера, он просто сидит там и ждет…
3. Что, какая версия работает, а какая нет? Ваш первоначальный вопрос неясен. Вы также можете попробовать использовать HTTP-прокси (например, Charles Proxy), чтобы увидеть запрос, который делают ваши приложения, и ответы от сервера.