android loginDemo +WebService用户登录验证 续篇

  本文为android loginDemo +WebService用户登录验证的续篇,在这里我主要总结的是在LoginActivity的demo中添加webservice代码实现用户网络验证(本地验证参考 android loginDemo +WebService用户登录验证)。
            1、添加用户上网权限
                在AndroidManifest.xml中添加用户权限,添加如下代码使用户有上网的权限。
<uses-permission android:name="android.permission.INTERNET"/>
         2、定义Webservice的命名空间和服务地址以及Webservice方法,定义android下webservice的相关对象。
            Webservice的服务地址和命名空间及内部方法的获得,请参考(Android 使用.net开发的webservice做用户登录验证 )中的WebService解析。关于android下webservice的使用请参考()webservice的入门学习。
            定义Webservice相关函数代码
	/*******************************************/
	final static String SERVICE_NS = "http://tempuri.org/"; //Webservice所在命名空间
	final static String SERVICE_URL = "http://192.168.1.213:9006/WS_Base.asmx";//Webservice服务地址
	final static String methodName = "AuthenticateLogin";//要使用的接口函数
	
	private HttpTransportSE ht; //该对象用于调用WebService操作
	private SoapSerializationEnvelope envelope;//上一个类信息的载体
	private SoapObject soapObject; //将参数传递给WebService
	/**********************************************/
        3、删除 attemptLogin方法中的关于用户邮件验证的部分,(程序中有一些要删除的部分,根据理解)。
        4、在 attemptLogin方法中更改异步方法 mAuthTask参数的传递类型。
         mAuthTask = new UserLoginTask();
            mAuthTask.execute(mEmail,mPassword);
        5、重新修改 异步方法实现用户登录验证(关于异步的学习可以参考 AsyncTask(异步)和Thread(线程)的使用与对比 .
            
	public class UserLoginTask extends AsyncTask<String, Void, Boolean> {
		@Override
		protected Boolean doInBackground(String... params) {
			// TODO: attempt authentication against a network service.
			//set webservices attribute
			/***********************************************/
			//创建HttpTransportSE对象,该对象用于调用WebService操作
			ht = new HttpTransportSE(SERVICE_URL);
			ht.debug = true;
			//创建SoapSerializationEnvelope对象,它是HttpTransportSE调用WebService时消息
			//的载体;客户端需要传入的参数,需要通过SoapSerializationEnvelope对象的bodyOut属性
			//传给服务器;服务器响应生成的SOAP消息也通过该对象的bodyIn属性来获取。
			envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//指明SOPA规范
			//创建SoapObject对象,创建对象时需要传入调用Web Service的命名空间、方法名。
			soapObject = new SoapObject(SERVICE_NS, methodName);
			
			/************************************************************/
			//SoapObject 对象的addProperty(String name,Object value)方法将参数传递给服务端
			//该方法的name参数指定参数名;value参数指定参数值。
			//如果方法存在多个参数,多次调用addProperty即可。
			soapObject.addProperty("userName",params[0]);
			soapObject.addProperty("password",params[1]);
			envelope.bodyOut = soapObject;
			//设置WebService的开发类型
			envelope.dotNet = true;
			try 
			{
				//调用远程WebService,call()方法的参数意义 第一个参数:命名空间+方法名,
				//第二个参数:SoapSerializationEnvelope对象
				ht.call(SERVICE_NS+methodName, envelope);
				if(envelope.getResponse()!=null)
				{
					//SoapSerializationEnvelope对象的bodyIn属性返回一个SoapObject对象,
					//该对象就代表了WebService的返回消息。
					//WebService在服务器端返回值是String类型的数值的时候使用Object代替SoapObject
					SoapObject result = (SoapObject)envelope.bodyIn;
					Object detail1 = (Object) result.getProperty(0);					
					return detail1.toString().equals("true");
				}
				return false;
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
			catch (XmlPullParserException e) {
				// TODO: handle exception
				e.printStackTrace();
			}
			return false;
		}
		@Override
		protected void onPostExecute(final Boolean success) {
			mAuthTask = null;
			showProgress(false);

			if (success) {
				finish();
			} else {
				mPasswordView
						.setError(getString(R.string.error_incorrect_password));
				mPasswordView.requestFocus();//设置密码框获得焦点
			}
		}
		@Override
		protected void onCancelled() {
			mAuthTask = null;
			showProgress(false);
		}
	}

总结:“关于android loginDemo +WebService用户登录验证”实验中遇到的问题及知识点总结
1、@Override是什么意思
没什么用,这是IDE编辑器为你自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次。
2、@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)。
    说明应用的API版本,在代码中获得平台的SDK版本与这个版本对比,在代码中判断应用与平台的兼容性。
    关于获取及使用用户信息的Bulid列的介绍及使用说明, 参考android专栏
3、EditText:
    ①android:imeOptions  置软键盘的 Enter 键。有如下值可 置: normal actionUnspecified actionNone actionGo actionSearch actionSend actionNext actionDone flagNoExtractUi     flagNoAccessoryAction flagNoEnterAction 。可用 ’|’ 设置多个。
    设置   android:imeOptions="actionDone"  ,软键盘下方变成“完成”,点击后光标保持在原来的输入框上,并且软键盘关闭。
       android:imeOptions="actionSend" 软键盘下方变成“发送”,点击后光标移动下一个。
    ②setError(string);设置编辑框的提示,例如setError(“密码不能为空”);
    ③focusView.requestFocus();设置编辑框获得焦点,实例:
        focusView = mEmailView;
        focusView.requestFocus();
View:
    ①setVisibility设置空间在界面的可见性
1.View.VISIBLE,常量值为0,意思是可见的
2.View.INVISIBLE,常量值是4,意思是不可见的
3.View.GONE,常量值是8,意思是不可见的,并且不占用布局空间
 
XML:
    ①Android:Layout_gravity    设置该组件在其容器中的对其方式。
           Android:Layout_gravity=” center“(在组件中心)。
        android:gravity     设置组件的子组件在组件中的位置,可以同时制定多种对齐方式的组合
            android:gravity="left|center_vertical"代表出现在屏幕左边,而且垂直居中。
    ②android:inputType 设置文本的输入类型
        android:inputType =“textPassword”设置输入类型为密码。
    ③ <b>  标签呈现粗体文本效果:
         <string name="action_sign_in_register"><b>Sign in</b> or register</string>
String 类
        ①String.split
            根据给定的正则表达式的匹配来拆分此字符串。
6、做这个东西和总结了这篇文章,主要是在寻找自己的学习方法,也希望在学习的过程中留下点东西。
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值