您好,在我的应用程序中,我已将数据存储在我的本地数据库sqlite3中。现在我必须将数据从本地数据库sqlite3上传到在线服务器。为了检索数据,我使用dataDictionary从sqlite3数据库中获取所有数据。
在我的h文件中,我有我的网址将数据插入到我的在线服务器中。
#define kPostURL @"url"
#define Kname @"name"
#define kphone @"phone"
#define karea @"area"
#define kcity @"city"
在下面的代码中,我已将所有数据存储在数据字典中,并且已将数据存储到名为array的nsmutable数组中。如果我在日志中打印数组它显示所有数据。现在的问题是如何使用post方法将这个可移动数据传递到在线服务器。
NSMutableArray *array = [[NSMutableArray alloc] init];
entries = [[NSMutableArray alloc] init];
[self openDB];
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM reg"];
const char *query_stmt = [sql UTF8String];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(db, query_stmt, -1, &statement, nil)==SQLITE_OK) {
while (sqlite3_step(statement)==SQLITE_ROW) {
NSMutableDictionary *_dataDictionary=[[NSMutableDictionary alloc] init];
NSString *date = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
field1Str= date;
NSString *customer = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];
field2Str = customer;
NSString *code1 = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)];
field3Str = code1;
NSString *code2 = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement,3)];
field4Str = code2;
//NSString *str = [[NSString alloc]initWithFormat:@"%@ - %@ - %@ - %@",field1Str,field2Str,field3Str,field4Str];
//[entries addObject:str];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",field1Str] forKey:@"Kname"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",field2Str] forKey:@"kphone"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",field3Str] forKey:@"karea"];
[_dataDictionary setObject:[NSString stringWithFormat:@"%@",field4Str] forKey:@"kcity"];
[array addObject:_dataDictionary];
在下面的代码中,我使用post方法将数据传递给数据已在.m文件中声明的在线服务器,但我不知道如何在post方法中使用nsmutablearray。
-(void) withName:(NSString *) na phone:(NSString *) ph are:(NSString *) arr cit:(NSString *) citt {
if (na!= nil && ph != nil && arr != nil && citt != nil ) {
NSMutableString *postString = [NSMutableString stringWithString:kPostURL];
[postString appendString:[NSString stringWithFormat:@"?%@=%@", Kname,na]];
[postString appendString:[NSString stringWithFormat:@"&%@=%@", kphone,ph]];
[postString appendString:[NSString stringWithFormat:@"&%@=%@", karea,arr]];
[postString appendString:[NSString stringWithFormat:@"&%@=%@", kcity,citt]];
[postString setString:[postString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest *request =[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:postString]];
[request setHTTPMethod:@"POST"];
postConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}
}
在上面的代码中,我通过点击按钮传递数据。请告诉我如何让它长时间卡在我的头上。请给我一些解决方案。
- (IBAction)send:(id)sender {
[self withName:field1Str phone:field2Str are:field3Str cit:field4Str];
}
感谢。
答案 0 :(得分:1)
这取决于服务器接受的URL格式。
最简单的答案,但也是最糟糕的答案(不太适合未来),如果服务器支持它,则使用类似:?kname[0]=x&kname[1]=y
的URL来传递两个条目。
但是,如果您想同时发布大量数据,我建议您使用请求正文,而不是网址,因为您很快就会达到最大网址长度。
因此,您应首先将服务器设计为接受一组记录,然后使用客户端服务器端定义的格式。通常,一个好的解决方案是使用NSJSONSerialization在客户端序列化字典数组,将JSON字符串设置为请求的正文,并解析JSON服务器端。
此外,您应该在将每个字符串添加到URL之前对其进行转义。否则你将如何在&和分离你的领域和任何&出现在你的琴弦中?
答案 1 :(得分:0)
您必须先了解您的网络服务所需的参数。要将数据发送到服务器,您可以根据数组内容创建XML结构并将其传递给webservice参数。 您可以创建如下所示的XMl
<record>
<name>value</name>
<city>value</city>
.
.
</record>
并重复记录所需时间的数量。