2013-10-04 9 views
9

मैं अभी भी ASIHTTPRequest उपयोग कर रहा हूँ और मैं AFNetworking को स्थानांतरित करने के लिए मैं भी Raywenderlich Crash Course लेकिन के माध्यम से चला forword रहा हूँ के माध्यम से सरल HTTP अनुरोध बनाने के लिए कैसे अपने AFNetworking 2.0AFNetworking

का उपयोग नहीं कर मैं सिर्फ नमूना नीचे की कोशिश की है जो उल्लेख किया गया है AFNetworking पर लेकिन यह कुछ कैसे काम नहीं कर रहा है।

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
//manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 

NSDictionary *parameters = @{@"UserId": @"24",@"ArticleId":@"0"}; 

NSLog(@"%@",parameters); 



[manager POST:@"http://mysite.com/api/User/showArticleList" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
{ 
    NSLog(@"JSON: %@", responseObject); 


}failure:^(AFHTTPRequestOperation *operation, NSError *error) 
{ 
    NSLog(@"Error: %@", error); 
}]; 

डीबग क्षेत्र प्रदर्शित करता है:

त्रुटि डोमेन = NSCocoaErrorDomain कोड = 3840
(JSON टेक्स्ट सरणी के साथ शुरू नहीं किया "ऑपरेशन (कोको त्रुटि 3840.) पूरा नहीं किया जा सकता है।" या वस्तु और विकल्प टुकड़े सेट नहीं अनुमति देने के लिए।) UserInfo = 0xa0ba580 {NSDebugDescription = JSON टेक्स्ट सरणी या वस्तु और विकल्प टुकड़े सेट नहीं की अनुमति देने के साथ शुरू नहीं किया।}

लेकिन लिंक जब मैं का उपयोग Raywenderlich क्रैश कोर्स

01 उल्लेख
[manager POST:@"http://www.raywenderlich.com/downloads/weather_sample/weather.php?format=json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
{ 
    NSLog(@"JSON: %@", responseObject); 
}failure:^(AFHTTPRequestOperation *operation, NSError *error) 
{ 
    NSLog(@"Error: %@", error); 
}]; 

यह मुझे सही JSON आउटपुट दे रहा है, ऐसा क्यों है?

+1

आप 'setDefaultHeader डाला: @" स्वीकार "मूल्य: @" application/json "' – Larme

+0

यह 2.0 AFNetworking है उपरोक्त मामले में setDefaultHeader सेट नहीं किया जा सकता है। –

उत्तर

7

मैं अंत में समाधान के रूप में इस पाया है -

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 


    NSDictionary *parameters = @{@"UserId": @"24",@"Name":@"Robin"}; 

    NSLog(@"%@",parameters); 
    parameters = nil; 

    // if you want to sent parameters you can use above code 

    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

    [manager POST:@"http://maps.google.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
    { 

     NSLog(@"JSON: %@", responseObject); 


    }failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    { 
     NSLog(@"Error: %@", error); 
    }]; 

पाठ के लिए/HTML + अगर यह सही JSON स्ट्रिंग प्रदान नहीं करता है आप स्ट्रिंग से हटाने और यह सरणी या शब्दकोश में बदल सकते हैं।

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

     // if you want to sent parameters you can use above code 
     manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; 
    // header("Content-Type: application/json"); 
    // manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

     manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 


     [manager GET:@"your url" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 

      NSLog(@"responseObject %@",responseObject); 

      NSString *jsonString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 

      NSString *newJsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\'" withString:@""]; 

/* 
NSRange range = [jsonString rangeOfString:@"}" options:NSBackwardsSearch]; 
jsonString = [jsonString substringToIndex:range.location + 1]; 
*/ 
      NSData *data = [newJsonString dataUsingEncoding:NSUTF8StringEncoding]; 

      NSError *error; 
      NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 

      NSLog(@"array %@",array); 


      if (!array) { 
       NSLog(@"Parsing JSON failed: %@", error); 
      } 

      /* 
      NSData *newJSONData = [newJsonString dataUsingEncoding:NSUTF8StringEncoding]; 
      NSDictionary* json = [NSJSONSerialization 
      JSONObjectWithData:newJSONData 
      options:NSJSONReadingMutableContainers 
      error:&error]; 
      NSLog(@"json %@",json); 
      */ 

      NSLog(@"responseObject = %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]); 


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

      NSLog(@"%@",[error description]); 

     }]; 

कुछ मामलों आप प्रतिक्रिया शब्दकोश/सरणी को बदलने की जरूरत है - लेकिन कभी कभी एक वस्तु के सभी टुकड़े परिवर्तनशील नहीं हैं।
ऐसा करने के लिए निम्नानुसार करें।

सरणी के लिए शब्दकोश

NSError *error; 

       NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:responce options:NSJSONWritingPrettyPrinted error:&error]; 

       responseDictionary = [[NSMutableDictionary alloc]init]; 

       responseDictionary = [NSJSONSerialization JSONObjectWithData:dataFromDict options:NSJSONReadingMutableContainers error:&error]; 

लिए

NSError *error; 

       NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:responce options:NSJSONWritingPrettyPrinted error:&error]; 

       responseArray = [[NSMutableDictionary alloc]init]; 

       responseArray = [NSJSONSerialization JSONObjectWithData:dataFromDict options:NSJSONReadingMutableContainers error:&error]; 
3

आपके पास सर्वर की तरफ एएसपी.NET वेब एपीआई सेवा प्रतीत होती है। यह डिफ़ॉल्ट रूप से एक्सएमएल देता है।

आपके पास दो विकल्प:

  1. बदलें वेब सेवा के विन्यास के रूप में How do I get ASP.NET Web API to return JSON instead of XML using Chrome?

  2. में विस्तार से बताया अपने अनुरोध के साथ HTTP हेडर Accept: application/json भेजें।

+0

मैं एएसपी.नेट वेब एपीआई का उपयोग नहीं कर रहा हूं और दूसरी बात HTTP हेडर –

+0

के लिए कोई कोड संकेत विकल्प नहीं हैं तो आप सर्वर की तरफ क्या उपयोग कर रहे हैं? और यदि आप स्वीकृति HTTP शीर्षलेख का उपयोग कर एक निर्दिष्ट नहीं करते हैं तो यह किस प्रारूप में वापस आता है? – Codo

+0

webservice PHP-MYSQL के माध्यम से किया जाता है और यह JSON प्रारूप में डेटा प्रदान करता है –