开始学Android,在写一个软件的注册页面时出现了问题。点击绑定好的页面跳转的按钮,却显示该工程stop,跳转失败。但是!我已经在AndroidMainfest中定义好了activity,实在找不出错误。求助各位。
以下是代码部分。由于发送验证码部分不是我负责的,所以直接在数据类中把验证码定为1111
public class register_1_phone extends Activity{
private Button sure_code;
private EditText edit_phone;
private EditText edit_code;
private Button get_code;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.register_1_phone);
findView();
sure_code.setOnClickListener(new OnClickListener(){
public void onClick(View v){
String mCode=edit_code.getText().toString().trim();
//获得线程发出的验证码准备与用户输入的验证码比较
boolean judge=isSameCode(mCode);
if(judge==true)
{
Intent intent=new Intent(register_1_phone.this,register_2_user.class);
startActivity(intent);
}
else
//弹出对话框显示错误
{
creatdialog();
}
}
private boolean isSameCode(String mCode) {
String code=data_share.get_code();
if(code.equals(mCode))
return true;
else
return false;
}
private void creatdialog() {
AlertDialog.Builder b=new Builder(register_1_phone.this);
b.setMessage("您输入的验证码有误,check一下吧~");
b.setTitle("验证码错误");
b.setNegativeButton("重试", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.dismiss();
}
});
b.create().show();
}
});
get_code.setOnClickListener(new OnClickListener(){
public void onClick(View v){
String mphone=edit_phone.getText().toString().trim();//获取手机号
boolean judge=isMobile(mphone);
if(judge==false)
{
//如果手机号不合法,提示重输
creatdialog();
}
else{
data_share.set_phone(mphone);
//接下来新建一个线程去请求验证码
}
}
//判断手机号是否合法的函数
private boolean isMobile(String mphone) {
String num="[1][358]\\d{9}";//【1】表示第一位数字为1,【358】表示第二位必为3/5/8中的一个,\\d{9}表示后面是可以是0~9的数字,有9位
if(TextUtils.isEmpty(mphone)){
return false;
}
else{
return mphone.matches(num);//字符串是否在给定的正则表达式匹配
}
}
//创建显示手机号错误的对话框
private void creatdialog() {
AlertDialog.Builder b=new Builder(register_1_phone.this);
b.setMessage("您输入了一个来自火星的手机号,换个地球手机号吧~");
b.setTitle("手机号错误");
b.setNegativeButton("重试", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.dismiss();
}
});
b.create().show();
}
});
}
//绑定界面的控件
private void findView() {
sure_code=(Button)findViewById(R.id.sure_vrification_code);
edit_phone=(EditText)findViewById(R.id.edit_phone);
edit_code=(EditText)findViewById(R.id.edit_vrification_code);
get_code=(Button)findViewById(R.id.get_vrification_code);
}
}
建议你结构改成这样:
public class register_1_phone extends Activity {
private Button sure_code;
private EditText edit_phone;
private EditText edit_code;
private Button get_code;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.register_1_phone);
findView();
registerListener();
}
//绑定界面的控件
private void findView() {
sure_code=(Button)findViewById(R.id.sure_vrification_code);
edit_phone=(EditText)findViewById(R.id.edit_phone);
edit_code=(EditText)findViewById(R.id.edit_vrification_code);
get_code=(Button)findViewById(R.id.get_vrification_code);
}
private void registerListener(){
sure_code.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
String mCode=edit_code.getText().toString().trim();
//验证码的非空判断
if(TextUtils.isEmpty(mCode)){
Toast.makeText(getApplicationContext(), "请输入验证码", Toast.LENGTH_SHORT).show();
return;
}
//获得线程发出的验证码准备与用户输入的验证码比较
boolean judge=isSameCode(mCode);
if(judge==true)
{
Intent intent=new Intent(register_1_phone.this,register_2_user.class);
startActivity(intent);
}
else
//弹出对话框显示错误
{
createDialog("验证码错误", "您输入的验证码有误,check一下吧~");
}
}
});
get_code.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
String mPhone=edit_phone.getText().toString().trim();//获取手机号
boolean judge=isMobile(mPhone);
if(judge==false)
{
//如果手机号不合法,提示重输
createDialog("手机号错误", "您输入了一个来自火星的手机号,换个地球手机号吧~");
}
else{
data_share.set_phone(mPhone);
//接下来新建一个线程去请求验证码
}
}
});
}
private boolean isSameCode(String mCode) {
String code=data_share.get_code();
if(code.equals(mCode))
return true;
else
return false;
}
//判断手机号是否合法的函数
private boolean isMobile(String mPhone) {
String num="[1][358]\\d{9}";
if(TextUtils.isEmpty(mPhone)){
return false;
}
else{
return mPhone.matches(num);//字符串是否在给定的正则表达式匹配
}
}
//通用dialog,title和msg作为参数传进来
private void createDialog(String title, String msg) {
AlertDialog.Builder b=new AlertDialog.Builder(this);
b.setMessage(msg);
b.setTitle(title);
b.setNegativeButton("重试", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.dismiss();
}
});
b.create().show();
}
}
其实最重要部分在于开启子线程获取验证码部分,你没贴出来。log错误信息你也贴出来。
1、你先检查下有没加访问网络权限:
<uses-permission android:name="android.permission.INTERNET" />
2、从EditText获取用户输入验证码,最好先进行非空判断:
//验证码的非空判断
if(TextUtils.isEmpty(mCode)){
Toast.makeText(getApplicationContext(), "请输入验证码", Toast.LENGTH_SHORT).show();
return;
}
3、创建对话框和验证码校验、验证码获取方法建议不要写在onClickListener监听里面。
4、dialog对话框可以传入title和msg,使用通用dialog。
5、既然是开启子线程获取验证码,应该在主线程获取结果,这里面不清楚你是怎么操作的。可以的话,把相关代码分享出来
你要把异常信息发出来啊
把setOnClickListener中的另外两个方法提到onCreate()外面来
把其他代码也发出来,我也可以学习学习。。。。。。
问题已经解决。是我在两个页面中的按钮同时命名为log_in导致绑定出现了错误从而跳转失败。