在 Afnetworking 中一起处理 GET/POST/ PUT/DELETE Base Class 中即将到来的请求
Handling GET/POST/ PUT/ DELETE upcoming Requests in Base Class all together in Afnetworking
我创建了一个连接管理器基础 class,它处理 POST 请求。但是我在 GET 和 PUT 中有一些请求。
如何通过下面代码中的连接管理器class处理GET/POST/PUT。
让我知道我正在以正确的方式使用 void -
发出请求
我的连接管理器 Class,它只处理 POST 请求 -
.h
typedef NS_ENUM(NSUInteger, HttpRequestMethod)
{
HttpRequestMethodPOST,
HttpRequestMethodGET
};
@interface VCConnectionManager : NSObject
+ (instancetype) sharedInstance;
- (void) actionmethod:(NSString *)action parameters:(NSDictionary *)params onComplete:(void (^)(NSMutableDictionary *json))successBlock onError:(void (^)(NSError *error))errorBlock;
@end
.m
@implementation VCConnectionManager
+(instancetype) sharedInstance {
DEFINE_SINGLETON_WITH_BLOCK(^{
return [[VCConnectionManager alloc] init];
});
}
- (void) actionmethod:(NSString *)action parameters:(NSDictionary *)param onComplete:(void (^)(NSMutableDictionary *json))successBlock onError:(void (^)(NSError *error))errorBlock {
BOOL network = [self currentNetworkStatus];
if(network){
NSString *weburl = WS_BASE_URL;
NSString * completeRequestUrl = [NSString stringWithFormat:@"%@%@", weburl,action];
DDLogVerbose(@"Complete_URL--->%@",completeRequestUrl);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = requestSerializer;
[params setValue:@"0" forKey:@"loginType"];
[manager POST:completeRequestUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject){
successBlock(responseObject);
DDLogVerbose(@"\n\n\n\nResponse Result---->%@",responseObject);
}
failure: ^(AFHTTPRequestOperation *operation, NSError *error){
//DDLogVerbose(@"Error: %@", error);
errorBlock(error);
}];
}
else{
UIAlertView *internetAlert = [[UIAlertView alloc]initWithTitle:AppName message:NETWORK_ERROR delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[internetAlert show];
}
}
添加一个方法参数并将其命名为 methodType
。为简洁起见,我不会 typedef
这样做,但你应该这样做。
- (void)actionmethod:(NSString *)action methodType:(NSString*)methodType parameters:(NSDictionary *)param onComplete:(void (^)(NSMutableDictionary *json))successBlock onError:(void (^)(NSError *error))errorBlock { // etc.
...
if ([methodType isEqualToString:@"POST"]) {
[manager POST:completeRequestUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject)...
} else if (([methodType isEqualToString:@"GET"]) {
[manager GET:completeRequestUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject)...
}
// etc.
我创建了一个连接管理器基础 class,它处理 POST 请求。但是我在 GET 和 PUT 中有一些请求。
如何通过下面代码中的连接管理器class处理GET/POST/PUT。
让我知道我正在以正确的方式使用 void -
发出请求我的连接管理器 Class,它只处理 POST 请求 -
.h
typedef NS_ENUM(NSUInteger, HttpRequestMethod)
{
HttpRequestMethodPOST,
HttpRequestMethodGET
};
@interface VCConnectionManager : NSObject
+ (instancetype) sharedInstance;
- (void) actionmethod:(NSString *)action parameters:(NSDictionary *)params onComplete:(void (^)(NSMutableDictionary *json))successBlock onError:(void (^)(NSError *error))errorBlock;
@end
.m
@implementation VCConnectionManager
+(instancetype) sharedInstance {
DEFINE_SINGLETON_WITH_BLOCK(^{
return [[VCConnectionManager alloc] init];
});
}
- (void) actionmethod:(NSString *)action parameters:(NSDictionary *)param onComplete:(void (^)(NSMutableDictionary *json))successBlock onError:(void (^)(NSError *error))errorBlock {
BOOL network = [self currentNetworkStatus];
if(network){
NSString *weburl = WS_BASE_URL;
NSString * completeRequestUrl = [NSString stringWithFormat:@"%@%@", weburl,action];
DDLogVerbose(@"Complete_URL--->%@",completeRequestUrl);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = requestSerializer;
[params setValue:@"0" forKey:@"loginType"];
[manager POST:completeRequestUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject){
successBlock(responseObject);
DDLogVerbose(@"\n\n\n\nResponse Result---->%@",responseObject);
}
failure: ^(AFHTTPRequestOperation *operation, NSError *error){
//DDLogVerbose(@"Error: %@", error);
errorBlock(error);
}];
}
else{
UIAlertView *internetAlert = [[UIAlertView alloc]initWithTitle:AppName message:NETWORK_ERROR delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[internetAlert show];
}
}
添加一个方法参数并将其命名为 methodType
。为简洁起见,我不会 typedef
这样做,但你应该这样做。
- (void)actionmethod:(NSString *)action methodType:(NSString*)methodType parameters:(NSDictionary *)param onComplete:(void (^)(NSMutableDictionary *json))successBlock onError:(void (^)(NSError *error))errorBlock { // etc.
...
if ([methodType isEqualToString:@"POST"]) {
[manager POST:completeRequestUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject)...
} else if (([methodType isEqualToString:@"GET"]) {
[manager GET:completeRequestUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject)...
}
// etc.