ios app消费webservice

ios app消费webservice,第1张

概述我已经完成了很多关于webservice的阅读和研究,并从iOS应用程序中消费它们.但许多网站都非常简短,并没有深入了解消费和解析数据.目前我正在阅读raywenderlich http://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-service的教程并阅读SO线程http:/ /stackoverflo 我已经完成了很多关于webservice的阅读和研究,并从iOS应用程序中消费它们.但许多网站都非常简短,并没有深入了解消费和解析数据.目前我正在阅读raywenderlich http://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-service的教程并阅读SO线程http:/ /stackoverflow.com/questions/7364326/recommendations-for-net-web-service-format-protocol-for- android-iphone-etc-i但我仍然不清楚我应该如何处理它.

据我所知,到目前为止,使用Web服务的几种方法是REST和SOAP协议. (我的应用程序在xcode和webservice在VB中完成(.asmx文件))

我是那种通过教程而不是阅读文章等而更多,更快地学习的人.是否有任何教程可以使用.asmx(使用VS构建的webservice)而不是PHP.就个人而言,我更喜欢解析JSON的REST协议,因为很多人说它更容易使用,并且Apple已经有了一个lib /框架.

如果有人能指出我正确的方向会很好,因为我觉得学习如何让iOS应用程序使用Web服务在未来的应用程序开发中非常重要.

编辑:通过PHP网络服务阅读后,我有一些我没有的东西.

函数兑换来自http://www.raywenderlich.com/2941/how-to-write-a-simple-PHPMysqL-web-service-for-an-ios-app

// Put parameters into local variables        $rw_app_ID = $_POST["rw_app_ID"];        $code = $_POST["code"];        $device_ID = $_POST["device_ID"]

如果我使用的是asmx文件,我是否还必须在每个web方法中声明这样的内容?

E.G我的一个webMethod(基本CRUD)

[的WebMethod]

public string insertUser(string User,string Password,string Gender)        {               try                {                    string connectionString = ConfigurationManager.ConnectionStrings["MysqL"].ToString();                    MysqLCommand dCmd = new MysqLCommand();                    using (MysqLConnection MysqLCon = new MysqLConnection(connectionString))                    {                        if (do_check_record(User) == false)                            {                                MysqLCon.open();                                dCmd.CommandText = "INSERT into tbl_login (username,password,gender) values (?username,?password,?gender)";                                dCmd.CommandType = CommandType.Text;                                dCmd.Parameters.Add(new MysqLParameter("?username",User));                                dCmd.Parameters.Add(new MysqLParameter("?password",Password));                                dCmd.Parameters.Add(new MysqLParameter("?gender",Gender));                                dCmd.Connection = MysqLCon;                                dCmd.ExecuteNonquery();                                MysqLCon.Close();                            }                            else                            {                                return string.Format( "User exists in data_base");                            }                    }                    return string.Format("data_base insert");                }                catch (Exception ex)                {                    return string.Format(ex.Message);                }}

在应用程序端消费webservice

本教程中给出的示例是

- (BOol)textFIEldShouldReturn:(UITextFIEld *)textFIEld {    NSLog(@"Want to redeem: %@",textFIEld.text);    // Get device unique ID    UIDevice *device = [UIDevice currentDevice];    Nsstring *uniqueIDentifIEr = [device uniqueIDentifIEr];    // Start request    Nsstring *code = textFIEld.text;    NSURL *url = [NSURL URLWithString:@"http://www.wildfables.com/promos/"];    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];    [request setPostValue:@"1" forKey:@"rw_app_ID"];    [request setPostValue:code forKey:@"code"];    [request setPostValue:uniqueIDentifIEr forKey:@"device_ID"];    [request setDelegate:self];    [request startAsynchronous];    // HIDe keyword    [textFIEld resignFirstResponder];    // Clear text fIEld    textVIEw.text = @"";        return TRUE;}

但它不应该是一个IBAction按钮来调用而不是BOol吗?

- (voID)requestFinished:(ASIhttpRequest *)request{        if (request.responseStatusCode == 400) {        textVIEw.text = @"InvalID code";            } else if (request.responseStatusCode == 403) {        textVIEw.text = @"Code already used";    } else if (request.responseStatusCode == 200) {        Nsstring *responseString = [request responseString];        NSDictionary *responseDict = [responseString JsONValue];        Nsstring *unlockCode = [responseDict objectForKey:@"unlock_code"];        if ([unlockCode compare:@"com.razeware.test.unlock.cake"] == NSOrderedSame) {            textVIEw.text = @"The cake is a lIE!";        } else {                    textVIEw.text = [Nsstring stringWithFormat:@"Received unexpected unlock code: %@",unlockCode];        }    } else {        textVIEw.text = @"Unexpected error";    }}- (voID)requestFailed:(ASIhttpRequest *)request{        NSError *error = [request error];    textVIEw.text = error.localizedDescription;}

如果我错了,请纠正我,但是这个方法 – (voID)requestFinished:(ASIhttpRequest *)请求在教程中使用的是解析JsON的请求,对吧?如果是这样,对于我调用的每个web方法,我必须发出一个新请求和一个新的 – (voID)requestFinished:(ASIhttpRequest *)请求

编辑:真的很感激任何帮助……我是初学者,希望有经验的人能指导我.

解决方法

do I also have to declare something like this in every of my web method?

您上面发布的代码是从POST中提取数据. asmx文件应该已经为您执行此 *** 作.您在POST中传递的参数将转换为传递给Methodname的参数(请参阅:Accessing XML Web Services).

更新

因此,如果我理解正确,您的Web服务端点是http://xxx.yyy/zzz.asmx/insertUser.然后,您将使用变量用户名,密码和性别发送帖子正文:

[request setPostValue:username forKey:@"User"];[request setPostValue:password forKey:@"Password"];[request setPostValue:gender forKey:@"Gender"];

But shouldn’t it be a IBAction button to call instead of a BOol?

No. -textFIEldShouldReturn:是UITextField的delegate方法.它不是IBAction.

当用户触摸文本字段时,键盘变为活动状态.当在键盘上按下返回按钮时,文本字段的委托将发送-textFIEldShouldReturn:消息.

结果是当在键盘上按下return或done时调用此方法.

为我错过的部分添加了更多信息

Correct me if I’m wrong,but this method -requestFinished: used in the tutorial is the one that is parsing JsON,right? If so,for every webmethod that I call,I have to make a new request and a new -requestFinished:

不,只有一个-requestFinished:每个班级.您可以将客户端分成几个类:每个Web服务URL一个,或者您需要区分一个-requestFinished中的不同URL:

- (voID)requestFinished:(ASIhttpRequest *)request{    if ([request.originalURL.absoluteString isEqualToString:@"http://xxx.yyy/zzz.asmx/methodname"]) {        // handle methodname endpoint.    }}

如果您不喜欢委托的工作方式,也可以使用-setCompletionBlock:和-setFailedBlock:而不是-setDelegate:.更好的是,像@Stew建议的那样选择像AFNetworking这样的东西.

总结

以上是内存溢出为你收集整理的ios app消费webservice全部内容,希望文章能够帮你解决ios app消费webservice所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1038271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存