注意事项:公司后台发送请求后,得到的错误结果是JSON text did not start with array or object and option to allow fragments not set;
这是因为 AFNetworking默认把响应结果当成json来处理,(默认manager.responseSerializer = [AFJSONResponseSerializer serializer]) ,很显然,我们请求的百度首页 返回的并不是一个json文本,而是一个html网页,但是AFNetworking并不知道,它坚信请求的结果就是一个json文本!然后固执地以json的形式去解析,显然没办法把一个网页解析成一个字典或者数组,所以产生了上述错误.
然而,我们期望它能够正确地处理这个情形,而不是提示一个错误.
这时候 你必须告诉AFNetworking:别把这个网页当json来处理!
只需要在发送请求前加入:manager.responseSerializer = [AFHTTPResponseSerializer serializer];
主要代码如下:
@interfaceMeTableViewController()
UIImagePickerControllerDelegate,
UINavigationControllerDelegate,UITabBarControllerDelegate>
/**
*我的头像
*/
@property(weak,nonatomic)IBOutletUIImageView*myImageView;
@property(nonatomic,strong)UIAlertController* alertController;
@property(nonatomic,strong)UIAlertAction* cancelAction;
@property(nonatomic,strong)UIAlertAction* cameraAction;
@property(nonatomic,strong)UIAlertAction* albumAction;
@property(nonatomic,strong)KUserInfo* userInfo;
@property(nonatomic,strong)NSString* token;
@property(nonatomic,assign)NSIntegerselectedIndex;
/**
*我的爱心币
*/
@property(weak,nonatomic)IBOutletUILabel*myLoveMoneyLabel;
/**
*我的昵称
*/
@property(weak,nonatomic)IBOutletUILabel*myUserNameLabel;
/**
*我的捐款总额
*/
@property(weak,nonatomic)IBOutletUIButton*launchBtn;
@property(weak,nonatomic)IBOutletUIButton*donateBtn;
@property(weak,nonatomic)IBOutletUILabel*myDonateTotalLabel;
@property(nonatomic,strong)NSIndexPath* indexPath;
@property(nonatomic,strong)NSString* filePath;
@end
@implementationMeTableViewController
#pragma mark-----------懒加载
- (UIAlertController*)alertController
{
if(!_alertController) {
_alertController= [UIAlertControlleralertControllerWithTitle:@"请选择"message:@"获取照片的来源"preferredStyle:UIAlertControllerStyleActionSheet];
[_alertControlleraddAction:self.cancelAction];
[_alertControlleraddAction:self.cameraAction];
[_alertControlleraddAction:self.albumAction];
}
return_alertController;
}
- (UIAlertAction*)cancelAction
{
if(!_cancelAction) {
_cancelAction= [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:^(UIAlertAction*_Nonnullaction) {
[selfdismissViewControllerAnimated:YEScompletion:nil];
}];
}
return_cancelAction;
}
- (UIAlertAction*)cameraAction
{
if(!_cameraAction) {
_cameraAction= [UIAlertActionactionWithTitle:@"照相机"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*_Nonnullaction) {
if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIImagePickerController*pc = [[UIImagePickerControlleralloc]init];
pc.allowsEditing=YES;
pc.sourceType=UIImagePickerControllerCameraCaptureModeVideo;
pc.delegate=self;
[selfpresentViewController:pcanimated:YEScompletion:nil];
}
}];
}
return_cameraAction;
}
- (UIAlertAction*)albumAction
{
if(!_albumAction) {
_albumAction= [UIAlertActionactionWithTitle:@"相册"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*_Nonnullaction) {
UIImagePickerController*pc = [[UIImagePickerControlleralloc]init];
pc.allowsEditing=YES;
pc.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
pc.delegate=self;
[selfpresentViewController:pcanimated:YEScompletion:nil];
}];
}
return_albumAction;
}
- (KUserInfo*)userInfo
{
if(!_userInfo) {
_userInfo= [KUserInfosharedUserInfo];
}
return_userInfo;
}
#pragma mark----------------------------------------------------viewDidLoad
- (void)viewDidLoad {
[superviewDidLoad];
if(self.userInfo.avator) {
[self.myImageViewsetImageWithURL:[NSURLURLWithString:self.userInfo.avator]];
}else{
//默认头像
}
}
//添加图片圆角并加tap手势
- (void)setUpImageView{
[self.myImageViewsetRoundLayer];
[self.myImageViewaddGestureRecognizer:[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(headImageTap)] ];
}
/*图片tap方法的处理,跳转到alertController*/
- (void) headImageTap
{
[selfpresentViewController:self.alertControlleranimated:YEScompletion:nil];
}
#pragma mark----------UIImagePickerControllerDelegate
/**选择图片的处理*/
- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage*image = info[UIImagePickerControllerEditedImage];
self.myImageView.image= image;
//保存到沙盒
[selfsaveImage:imageWithName:@"avator"];
[self dismissViewControllerAnimated:YEScompletion:nil];
}
//保存图片
- (void)saveImage:(UIImage*)tempImage WithName:(NSString*)imageName
{
UIImage*imageNew = tempImage;
//设置image的尺寸(可以自己制定)
CGSizeimagesize = imageNew.size;
imagesize.height=626;
imagesize.width=413;
//对图片大小进行压缩--
imageNew = [selfimageWithImage:imageNewscaledToSize:imagesize];
NSData*imageData =UIImageJPEGRepresentation(imageNew,0.00001);
//return image to png
// NSData* imageData = UIImagePNGRepresentation(tempImage);
NSString* documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];
NSString* totalPath = [documentPathstringByAppendingPathComponent:imageName];
self.filePath= totalPath;
//保存到document
[imageDatawriteToFile:totalPathatomically:NO];
//保存到NSUserDefaults
NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];
[userDefaultssetObject:totalPathforKey:@"avatar"];
//上传服务器
NSLog(@"图片文件地址:%@",self.filePath);
dispatch_async(dispatch_get_global_queue(0,0), ^{
NSLog(@"3%@",[NSThreadcurrentThread]);
[selfsendChangeUserAvatorRequest];
});
}
//对图片尺寸进行压缩--(压缩前3.2M,压缩后为16K)
-(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
// Create a graphics image context
UIGraphicsBeginImageContext(newSize);
// Tell the old image to draw in this new context, with the desired
// new size
[imagedrawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
// Get the new image from the context
UIImage* newImage =UIGraphicsGetImageFromCurrentImageContext();
// End the context
UIGraphicsEndImageContext();
// Return the new image.
returnnewImage;
}
#pragma mark--------------发送更换用户头像的请求(自己对AFNetworking重新进行封装)kCHANGEAVATORSTR是.pch中声明的各种参数
- (void)sendChangeUserAvatorRequest
{
[AFHTTPSessionManagerGET:kCHANGEAVATORSTR parameters:nilcompletionHandle:^(idmodel,NSError*error){
if(!error) {
[selfshowAlert:@"头像修改成功"];
}else{
NSLog(@"error:%@",error.userInfo);
[selfshowAlert:@"头像修改失败"];
}
}];
}
@end
主要用于个人记录,供参考!!!!!!!