之前学的是C#,然后想转android,完全是个小白。然后就看了一些安卓的教学视频,在慕课网(http://www.imooc.com/course/list)中学习的。
然后想做一个登录的小dome,然后我就开始拉界面,写事件,写接口。瞬间感觉好牛逼的感觉(自我感觉而已莫要当真,各位大大见笑)
然后我们来说说接口,接口我是用Webservice写的。有两个方法,
方法一 :是根据用户名、密码去获取是否真确放回一个json格式数据,
方法二:根据名称,模糊查询数据,返回json格式的数据。
然后接口写好了,客户端也搭建好了,就开始写调用接口的方法了。要怎么调用呢。然后我就去看了关于Http相关的协议、方法、怎么使用。因为是小白,我就对着视频一步一步的对代码进行编码。担心会出bug会报错,所以就很认真的检查相关的代码。确定无误好开始执行了。
执行结果果然报错了,跟踪调试得到了错误提示是500。看到是这个错误,果断知道是服务器的错误了。然后我对我的Webservice服务进行了排查。发现服务能正常访问,也能得到正确的数据。
没找到问题出现在哪,我就开始了百度。百度搜索的到了结果说:“看看URL和参数是否传入正确”。然后我就方法中的URL和参数的传入进行了排斥。
因为是小白,所以排查结果没有找到问题出行在哪。然后我就开始思索,因为我的Webservice部署在本机上,是不是局域网的问题。通过手机不能访问。然后我就用手机连上了wifi(电脑和手机连的wifi是同一个),用手机测试Webservice的接口能否在手机上正常访问,测试结果:手机上能正常访问Webservice。
测试到这里我就开始纠结了。Url和参数有传入,局域网中有能访问,为什么会报500错误呢。
之后早朋友(简称:贰貨)要了一个能外网访问的URl和相关参数进行方法测试,看是不是我方法哪里有写错。经过修改测试能正常得到数据
然后我就对奇怪了,我的Url和参数真确,我的不能访问成功,而贰貨给我的URl和参数却能正常访问。我对URl地址进行了对比
我的Url:http://192.168.100.147:8081/Service1.asmx?op=GetCusInfo
贰貨Url:http://117.29.161.210:8091/web/api/Vehicle/GetSignOutPassFeeNew
两个Url地址没什么不对的地方。参数传递也没错误。这更让我费解了。然后又开始百度找相关的问题。 这次我想是不是我用的获取数据的方法不对(用的是HttpPost),然后在百度上找到了一个关于android调用Webservice的帖子( http://www.cnblogs.com/gzggyy/archive/2011/06/21/2086140.html),他用的方式是SoapObject这个类进行相关数据的获取,里面有相关方法的编码。我不在这里列举。
虽然能解决数据的获取问题,可是我还是有点纠结用Httpost的方式去获取数据,为什么呢(应为我觉得用HttpPost的方式代码要少些写起来也很方便)。然后我有开始了搜索。
功夫不负有心人,我找到了一篇帖子里面方法的类容:
发现是我想要的,我就对我的相关URl、参数进行了对比。发现URL好像不同。瞬间开心了,然后我就更改了我的Url 改为了:http://192.168.100.147:8081/Service1.asmx/GetCusInfo 这样的。可是我在进行执行的时候还是报错了。然后我就把URl放到浏览器中执行发现个URL执行出错了。然后就用了帖子里面的那个Url地址进行访问,结果是能访问成功的。这我就开心了,找到问题在哪里了,就对Webservice进行了修改。发现是应为没有对Webservice 进行配置
<webServices>
<protocols>
<add name="HttpPost"/>
<add name="HttpGet"/>
</protocols>
</webServices>
配置文件中添加 <system.web>节点里面添加
配置成功后在进行测试小程序访问成功了。相关放回数据也得到了。可是结果:
却又前缀,对我解析json的时候出错了,然后就搜素如何去掉这个前缀。方法一:jsonStr.replaceAll("</?[^>]+>", "") .trim() 将String格式jsonStr执行方法得到了纯json数据。可是这样的方式我觉得有点悬,总感觉不对一样。然后就对Webservice进行了修改,可是我应该怎么改呢。
百度也找到了相关的问题,然后我对代码进行了修改:。 只会获取到的数据就是纯json格式的数据没有前缀了。
小程序数据解析展示也成功了