您的位置:首页 > 移动开发 > Android开发

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

2013-01-15 22:30 459 查看
本文为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
根据给定的正则表达式的匹配来拆分此字符串。
4、Build相关属性和调用系统信息的方法:
5、AsyncTask(异步)和Thread(线程)的使用与对比
6、做这个东西和总结了这篇文章,主要是在寻找自己的学习方法,也希望在学习的过程中留下点东西。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: