Tôi biết hầu như không có gì về JSON và tôi cần phải gửi một yêu cầu đến một máy chủ và đọc dữ liệu đến từ nó, chỉ sử dụng iPhone.JSON IPHONE: Cách gửi yêu cầu JSON và kéo dữ liệu từ máy chủ?
Tôi đã cố gắng sử dụng jason-framework để làm điều đó, nhưng sau khi đọc tài liệu tôi không thể tìm ra cách xây dựng đối tượng và gửi nó theo yêu cầu. Vì vậy, tôi đã quyết định điều chỉnh một mã khác mà tôi đã thấy ở đây trên SO.
Các Object tôi cần là thế này:
{ "code": xxx}
Ở đây tôi có một vấn đề. Xxx này là một NSData, vì vậy tôi nghi ngờ rằng tôi phải chuyển đổi dữ liệu này thành một chuỗi, sau đó sử dụng chuỗi này để xây dựng một đối tượng và gửi yêu cầu này.
phản ứng máy chủ cũng là một đối tượng JSON, dưới hình thức
{ "câu trả lời": "yyy"} nơi yyy là một số giữa 10000 và 99999
đây là đoạn code tôi có rất xa.
- (NSString *)checkData:(NSData) theData {
NSString *jsonObjectString = [self encode:(uint8_t *)theData length:theData.length];
NSString *completeString = [NSString stringWithFormat:@"http://www.server.com/check?myData=%@", jsonObjectString];
NSURL *urlForValidation = [NSURL URLWithString:completeString];
NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation];
[validationRequest setHTTPMethod:@"POST"];
NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil];
[validationRequest release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
NSInteger response = [responseString integerValue];
NSLog(@"%@", responseString);
[responseString release];
return responseString;
}
- (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=";
NSMutableData *data = [NSMutableData dataWithLength:((length + 2)/3) * 4];
uint8_t *output = (uint8_t *)data.mutableBytes;
for (NSInteger i = 0; i < length; i += 3) {
NSInteger value = 0;
for (NSInteger j = i; j < (i + 3); j++) {
value <<= 8;
if (j < length) {
value |= (0xFF & input[j]);
}
}
NSInteger index = (i/3) * 4;
output[index + 0] = table[(value >> 18) & 0x3F];
output[index + 1] = table[(value >> 12) & 0x3F];
output[index + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '=';
output[index + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '=';
}
ret
urn [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}
tất cả mã này cho tôi là lỗi. Hoặc URL BAD hoặc ngoại lệ java.
Điều gì sai với mã này?
Nếu các bạn thích để đưa ra giải pháp khác sử dụng json-framework xin vui lòng cho tôi biết làm thế nào để mã hóa các đối tượng sử dụng mà cặp ("code", "NSData của tôi ở đây chuyển thành chuỗi") ...
nhờ để được giúp đỡ.
Cảm ơn !!!!!! đó là nó!tài liệu thư viện ASIHTTPRequest là khá không đầy đủ và bề ngoài (không phải lỗi của bạn), nhưng tôi đã quản lý để làm cho nó hoạt động bằng cách sử dụng các hướng dẫn của bạn. Hoàn hảo! Bạn là người đàn ông D! – SpaceDog
Rất vui khi nó hoạt động cho bạn. Đừng từ bỏ ASIHTTPRequest. Nó khá đơn giản một khi bạn nhận được hang của nó. Chỉ có điều là, đừng quên cung cấp các phương thức setDidFinishSelector/setDidFailSelector và thiết lập ủy nhiệm để bạn nhận được thông báo khi mạng không thành công. Có quá nhiều ô chết ở ngoài kia. – Ramin