安卓开发之设置密码只能输入字母和数字的组合
无论是电脑还是手机以及其他电子设备,在输入密码的时候总是会需要做一些限制,比如不能输入空格,不能输入奇葩的非法字符,不能输入小于几位的密码,不能过于简单,等等。
在对EditText设置的时候往往需要加一些输入过滤器,监听什么的,但是EditText其实有一个很简单的属性,只要一行代码就可以设置EditText只能输入的内容,可以排除所有的非法字符。
android:digits="0123456789abcdefghigklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM"
此属性的意思就是只能输入数字、小写字母和大写字母。
设置密码的明文和密文显示这个现在的app中都具备这个功能了,我们下面一起来看看此功能如何实现吧,具体的代码如下所示。我们经常会在一些软件上发现在密码输入框的后面有一个按钮可以使我们输入的密码显示为密文(●●●●●或者*****),也可以显示为正常的可见状态,效果如图。
具体实现如下:
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="15dp"
android:orientation="horizontal">
<EditText
android:id="@+id/et_password"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="5"
android:paddingLeft="10dp"
android:digits="0123456789abcdefghigklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM"
android:gravity="center_vertical"
android:hint="6-16位,数字和密码组合"
android:inputType="textPassword"
android:textColorHint="#999999"
android:textSize="16sp" />
<Button
android:id="@+id/btn_pwd"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:gravity="center"
android:text="明文" />
</LinearLayout>
MainActivity:
package zmit.cn.edittext;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
private static final int PASSWORD_MINGWEN = 0x90;
private static final int PASSWORD_MIWEN = 0x81;
private EditText editText;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.et_password);
button = (Button) findViewById(R.id.btn_pwd);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = button.getText().toString().trim();
if (str.equals("明文")) {
button.setText("密文");
editText.setInputType(PASSWORD_MINGWEN);//设置显示为明文
editText.setSelection(editText.length());//设置光标显示
} else if (str.equals("密文")) {
button.setText("明文");
editText.setInputType(PASSWORD_MIWEN);//设置显示为密文
editText.setSelection(editText.length());//设置光标显示
}
}
});
}
}
简单对象访问协议(Simple Object Access Protocol,SOAP)是一种标准化的通信规范,主要用于Web服务(Web service)。SOAP的出现可以使网页服务器(Web Server)从XML数据库中提取数据时,无需花时间去格式化页面,并能够让不同应用程序之间通过HTTP协议,以XML格式互相交换彼此的数据,使这个交换过程与编程语言、平台和硬件无关。此标准由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到IBM、Lotus(莲花)、Compaq(康柏)等公司的支持,于2000年提交给万维网联盟(World Wide Web Consortium,W3C)。目前SOAP 1.1版是业界共同的标准。
SOAP基于XML标准,用于在分布式环境中发送消息,并执行远程过程调用。使用SOAP,不用考虑任何特定的传输协议(尽管通常选用HTTP协议),就能使数据序列化。
SOAP的优点如下:
SOAP是可扩展的。SOAP无需中断已有的应用程序,SOAP客户端、服务器和协议自身都能发展。而且SOAP能极好地支持中间介质和层次化的体系结构。
SOAP是简单的。客户端发送一个请求,调用相应的对象,然后服务器返回结果。这些消息是XML格式的,并且封装成符合HTTP协议的消息。因此,它符合任何路由器、防火墙或代理服务器的要求。
SOAP是完全和厂商无关的。SOAP可以相对于平台、操作系统、目标模型和编程语言独立实现。另外,传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。
SOAP与编程语言无关。SOAP可以使用任何语言来完成,只要客户端发送正确SOAP请求(也就是说,传递一个合适的参数给一个实际的远端服务器)。SOAP没有对象模型,应用程序可以捆绑在任何对象模型中。
SOAP–消息
SOAP使用Internet应用层协议作为其传输协议。SMTP以及HTTP协议都可以用来传输SOAP消息,SOAP亦可以通过HTTPS传输。一条SOAP消息就是一个普通的XML文档,包含下列元素:
必需的Envelope元素,可把此XML文档标识为一条SOAP消息。
可选的Header元素,包含头部信息。
必需的Body元素,包含所有的调用和响应信息。
可选的Fault元素,提供有关在处理此消息时发生错误的信息。
SOAP消息的重要的语法规则如下:
SOAP消息必须使用XML来编码。
SOAP消息必须使用SOAP Envelope命名空间。
SOAP消息必须使用SOAP Encoding命名空间。
SOAP消息不能包含DTD引用。
SOAP消息不能包含XML处理指令。
实例:
请求时候发送的消息内容如下:
<soapenv:Envelope
xmlns:soapenv=”http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:xsd=”http:// www.w3.org/2001/XMLSchema”
xmlns:xsi=”http:// www.w3.org/2001/XMLSchema-instance”>
<soapenv:Body>
<req:echo xmlns:req=”http:// localhost:8080/axis2/services/MySer-vice/”>
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
响应时候发送的消息内容如下:
<soapenv:Envelope
xmlns:soapenv=”http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:wsa=”http:// schemas.xmlsoap.org/ws/2004/08/addressing”>
<soapenv:Header>
<wsa:ReplyTo><wsa:Address>http:// schemas.xmlsoap.org/ws/2004/08/
addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:From><wsa:Address>http:// localhost:8080/axis2/
services/MyService</wsa:Address>
</wsa:From>
<wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
</soapenv:Header>
<soapenv:Body>
<req:echo xmlns:req=”http:// localhost:8080/axis2/services/MyService/”>
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
SOAP–调用WebService
SOAP调用WebService的具体步骤如下。
步骤1 添加ksoap2包。WebService是一种基于SOAP协议的远程调用标准,通过WebService可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WebService客户端库非常丰富,例如Axis2、CXF等,但这些开发包对于Android系统来说过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不在我们考虑范围内。适合手机的WebService客户端的SDK有一些,比较常用的是Ksoap2,可以从网址http://code.google.com/p/ksoap2-android/下载,然后将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。在Eclipse工程中引用这个jar包。
步骤2 指定WebService的命名空间和调用的方法名,如:
SoapObject request =new SoapObject(http:// service,”getName”);
SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间;第二个参数表示要调用的WebService方法名。
步骤3 设置调用方法的参数值,如果没有参数,可以省略。设置方法的参数值的代码如下:
Request.addProperty(“param1″,”value”);
Request.addProperty(“param2″,”value”);
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
步骤4 生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码如下:
SoapSerializationEnvelope envelope=
new SoapSerializationEnvelope(SoapEnvelope.VER11);
Envelope.bodyOut = request;
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在步骤2创建的SoapObject对象。
步骤5 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL。
HttpTransportSE ht=new HttpTransportSE
(“http:// fy.webxml.com.cn/webservices/EnglishChinese.asmxwsdl”);
步骤6 使用call方法调用WebService方法,代码如下:
ht.call(null,envelope);
call方法的第一个参数一般为null,第2个参数就是在步骤4创建的SoapSerialization-Envelope对象。
步骤7 使用getResponse方法获得WebService方法的返回结果,代码如下:
SoapObject soapObject =(SoapObject)envelope.getResponse();
步骤8 解析返回的内容。
在开发中返回顶部与底部我们经常会用到了,下面我们来看一篇关于Android监听ScrollView滑动到顶端和底部例子,具体的如下所示。package zm.scroolview;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
public class MainActivity extends Activity{
private ScrollView sl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sl = (ScrollView) findViewById(R.id.sl);
sl.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int scrollY=view.getScrollY();
int height=view.getHeight();
int scrollViewMeasuredHeight=sl.getChildAt(0).getMeasuredHeight();
if(scrollY==0){
System.out.println("滑动到了顶端 getScrollY()="+scrollY);
}
if((scrollY+height)==scrollViewMeasuredHeight){
System.out.println("滑动到了底部 scrollY="+scrollY);
System.out.println("滑动到了底部 height="+height);
System.out.println("滑动到了底部 scrollViewMeasuredHeight="+scrollViewMeasuredHeight);
}
break;
default:
break;
}
return false;
}
});
}
}
在Android应用程序开发过程中,经常需要解析HTML文档,特别是那类通过“爬网站”抓取数据的应用,比如天气预报。Java常用的解析HTML文档的方法有以下几种:
使用正则表达式来抽取数据。
以纯字符串查找定位来实现。
使用HTML Parser解析器。
使用Jsoup解析器。
在Android平台上推荐使用Jsoup解析器来解析HTML文档。Jsoup既可以通过一个URL网址,也可以通过存储HTML脚本的文件或者存储HTML脚本的字符串作为数据源,然后通过DOM、CSS选择器来查找、抽取数据。
使用Jsoup解析字符串形式的HTML文件的方法如下:
// 定义需要解析的HTML字符串
String html = “<html><head><title>First parse</title></head>”
+ “<body><p>Parsed HTML into a doc.</p></body></html>”;
// 将字符串解析之后放到Document对象中
Document doc = Jsoup.parse(html);
}
下面是一个具体的解析列子,使用Jsoup从HTML文件中提取出超链接、超链接文本、页面描述等内容。
// 需要解析的HTML字符串
String html = “<p>An <a href=’http:// example.com/’><b>example</b></a> link.</p>”;
// 保存到Document对象中
Document doc = Jsoup.parse(html);
// 得到第一个a标签的超链接
Element link = doc.select(“a”).first();
// 取出HTML字符串中的文本内容
// 这里test的值为 An example link
String text = doc.body().text();
// 获取属性为href的字符串
// 这里linkHref的值为”http:// example.com/”
String linkHref = link.attr(“href”);
// 获取a标签内部的纯文本
// linkText为 “example”
String linkText = link.text();
// 获取整个a标签里面的字符串
// 这里linkOuterH的值为<a href=”http:// example.com”><b>example</b></a>
String linkOuterH = link.outerHtml();
// 获取a标签内部(不包含a标签)的全部字符串
// 这里linkInnerH的值为<b>example</b>
String linkInnerH = link.html();
Jsoup还可以使用Whitelist()方法把不规范的HTML格式整理为规范格式,Whitelist方法定义了哪些HTML的元素和属性可以保留,其他的全部会被删除掉。Whitelist.basic()方法允许通过的文本节点为:a、b、blockquote、br、cite、code、dd、dl、dt、em、i、li、ol、p、pre、q、small、strike、strong、sub、sup、u、ul,以及相应的属性,不允许图片通过。
具体的使用方法如下:
String unsafe =
“<p><a href=’http:// example.com/’ onclick=’stealCookies()’>Link</a></p>”;
// 调用clean方法整理不标准的代码
String safe = Jsoup.clean(unsafe, Whitelist.basic());
// safe为<p><a href=”http:// example.com/” rel=”nofollow”>Link</a></p>
相关文章
- “一起,让我们将这个世界变得更好。”苹果首席执行官蒂姆 库克对着台下5000多名开发者说道,声音略有些沙哑和颤抖。...2016-07-04
- Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) ...2016-11-25
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
- 这篇文章主要为大家详细介绍了C#实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
- 设置登录密码我们一般会有限制的如由什么组合了,下面我们来看一篇关于安卓开发之设置密码只能输入字母和数字的组合方法,具体的细节如下所示。 无论是电脑还是手机...2016-09-20
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
php导出csv格式数据并将数字转换成文本的思路以及代码分享
php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07- 这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了自动设置安卓手机wifi代理的PowerShell脚本,帮助大家进行抓包测试,感兴趣的朋友可以了解下...2020-10-17
- 下面我们一起来看一篇关于 安卓开发之Intent传递Object与List的例子,希望这个例子能够为各位同学带来帮助。 Intent 不仅可以传单个的值,也可以传对象与数据集合...2016-09-20
- 这篇文章主要介绍了C#将数字转换成字节数组的方法,涉及C#字符串操作的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C++实现数字转换为十六进制字符串的方法,涉及C++操作数字与字符串转换的相关技巧,需要的朋友可以参考下...2020-04-25
- php实现数字格式化,数字每三位加逗号的功能函数,具体代码如下: function num_format($num){ if(!is_numeric($num)){ return false; } $num = explode('.',$num);//把整数和小数分开 $rl = $num[1];//小数部分的值...2015-10-23
Windows Server 2008 R2远程设置选项灰色解决方法
最近公司环境有几天Windows Server 2008R2的服务器因为没有激活导致过期后都不能远程,连接显示器后发现远程设置的地方为灰色了...2016-01-27- 这篇文章主要介绍了Lua判断变量是否为数字、字符串是否可以转换为数字等,本文讲解了Lua 判断是字符还是数字的方法、Lua判断数字的方法、判断可否转换为数字的方法、判断并且准备一个初值的方法,需要的朋友可以参考下...2020-06-30
- 复制代码 代码如下: $str='asb天水市12'; if (preg_match("/^[/x7f-/xff]+$/", $str)){ echo '全部是汉字'; }else { echo '不全是汉字'; } /** PHP自带的判断是否是中文, eregi('[^/x00-/x7F]', $str ) //中文 ereg...2013-10-04
vivo x9怎么设置默认输入法?vivo x9设置默认输入法教程
本篇文章介绍了vivo x9如何设置默认输入法的方法,手机小白们快来了解一下吧。 问:vivo x9怎么设置默认输入法?答:其实设置默认输入法很容易,首先点击应用程序,然后点设...2017-01-22- wifi上网 几乎是不需要什么设置了,我们只要简单的输入wifi密码与用户名就可以自动连接wifi上网了,下面我以安卓4.1系统为实例 具体步骤 1.在安卓手机中点击“...2016-09-20