调用AFNetworking响应失败块而不是成功块

时间:2015-05-14 12:35:38

标签: ios objective-c iphone afnetworking

当我获得状态代码200时,正在调用AFNetworking响应failure块。如何才能调用success

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://128.199.94.58/test/bt/client_token.php" parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         self.clientToken = responseObject[@"customerID"];
         NSLog(@"Client Token received.");
     }
     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         // Handle failure communicating with your server
         NSLog(@"Client Token request failed.%@",operation.responseString);
         NSLog(@"error code %ld",(long)[operation.response statusCode]);
     }];

5 个答案:

答案 0 :(得分:5)

查看error的值。它会告诉你连接失败的原因。 "故障"在这种情况下,与状态代码无关。返回" 404"仍然是一个成功的过程。"失败意味着您无法完成操作。

答案 1 :(得分:2)

使用acceptableStatusCodes如下:

 AFHTTPRequestOperationManager *manager =  [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [TimeoutAFJSONRequestSerializer serializer];
NSMutableIndexSet* codes = [[NSMutableIndexSet alloc] init];
[codes addIndex: 200];
manager.responseSerializer.acceptableStatusCodes = codes;

[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject)
 {


 } failure:^(AFHTTPRequestOperation *operation, NSError *error)
 {
 }];

答案 2 :(得分:1)

我运行此代码,它可以找到。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:@"http://128.199.94.58/test/bt/client_token.php" parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject
                                                              options:kNilOptions
                                                                error:nil];
         self.clientToken = json[@"customerID"];
         NSLog(@"Client Token received.");
     }
     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         // Handle failure communicating with your server
         NSLog(@"Client Token request failed.%@",operation.responseString);
         NSLog(@"error code %ld",(long)[operation.response statusCode]);
     }];

回应是:

json:
{
    customerID = "eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiJhMjg2OGVjY2FmZjNjMTQ0M2Y4MTg2MjQ4NDFhZDIyZGM3MWFhOTQ0MmFiMTY2NWVlNWY1YjJkODdiOTVhYzBjfGNyZWF0ZWRfYXQ9MjAxNS0wNS0xNFQxMzoyMDowNi45NjE2NDQxNzArMDAwMFx1MDAyNm1lcmNoYW50X2lkPXpxZDlkcGpmZmRzazd4bnlcdTAwMjZwdWJsaWNfa2V5PWRoeTdqeGt6Z3Y4d3dkcGoiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvenFkOWRwamZmZHNrN3hueS9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbImN2diJdLCJlbnZpcm9ubWVudCI6InNhbmRib3giLCJjbGllbnRBcGlVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvenFkOWRwamZmZHNrN3hueS9jbGllbnRfYXBpIiwiYXNzZXRzVXJsIjoiaHR0cHM6Ly9hc3NldHMuYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhdXRoVXJsIjoiaHR0cHM6Ly9hdXRoLnZlbm1vLnNhbmRib3guYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhbmFseXRpY3MiOnsidXJsIjoiaHR0cHM6Ly9jbGllbnQtYW5hbHl0aWNzLnNhbmRib3guYnJhaW50cmVlZ2F0ZXdheS5jb20ifSwidGhyZWVEU2VjdXJlRW5hYmxlZCI6ZmFsc2UsInBheXBhbEVuYWJsZWQiOnRydWUsInBheXBhbCI6eyJkaXNwbGF5TmFtZSI6InVzYyIsImNsaWVudElkIjpudWxsLCJwcml2YWN5VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3BwIiwidXNlckFncmVlbWVudFVybCI6Imh0dHA6Ly9leGFtcGxlLmNvbS90b3MiLCJiYXNlVXJsIjoiaHR0cHM6Ly9hc3NldHMuYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhc3NldHNVcmwiOiJodHRwczovL2NoZWNrb3V0LnBheXBhbC5jb20iLCJkaXJlY3RCYXNlVXJsIjpudWxsLCJhbGxvd0h0dHAiOnRydWUsImVudmlyb25tZW50Tm9OZXR3b3JrIjp0cnVlLCJlbnZpcm9ubWVudCI6Im9mZmxpbmUiLCJ1bnZldHRlZE1lcmNoYW50IjpmYWxzZSwiYnJhaW50cmVlQ2xpZW50SWQiOiJtYXN0ZXJjbGllbnQzIiwibWVyY2hhbnRBY2NvdW50SWQiOiI2ejl3eGtkanlyNnQzbmg1IiwiY3VycmVuY3lJc29Db2RlIjoiVVNEIn0sImNvaW5iYXNlRW5hYmxlZCI6ZmFsc2UsIm1lcmNoYW50SWQiOiJ6cWQ5ZHBqZmZkc2s3eG55IiwidmVubW8iOiJvZmYifQ==";
}

它可能适合你。

答案 3 :(得分:0)

如果您在失败时检查错误,请清楚地说明package org.busTracker.serverSide; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Map; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; /** * Root resource (exposed at "myresource" path) */ @Path("myresource") public class Apple { //String host = " jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/serv‌​erside"; //String host = "jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/bustrackerserver"; String host = "jdbc:mysql://127.10.230.440:3306/bustrackerserver"; String user = "adminNMccsBr"; String password = "K3SV5rbxh8qP"; /** * Method handling HTTP GET requests. The returned object will be sent * to the client as "text/plain" media type. * * @return String that will be returned as a text/plain response. */ @GET @Produces(MediaType.TEXT_PLAIN) public String getIt() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Connecting to database…"); conn = DriverManager.getConnection(host,user,password); Map<String, String> env = System.getenv(); for (String envName : env.keySet()) { System.out.format("%s=%s%n", envName, env.get(envName)); } } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { // ignore } } } return "Hello, from apple class 14.05.15 13:30!"; } } 。您需要按如下方式设置管理器的内容类型

invalid content type

答案 4 :(得分:0)

试试这个

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

并成功阻止

 success:^(AFHTTPRequestOperation *operation, id responseObject) {
     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:manager.responseData options:kNilOptions error:nil];
     self.clientToken = dic[@"customerID"];
     NSLog(@"Client Token received.");
 }