Frankie辉 2016-12-11 02:43 采纳率: 16.7%
浏览 1852
已采纳

Android页面跳转失败(已在AcivityMainfest中声明过)

开始学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);
}

}

点下“下一步后”的情况
图片说明
图片说明

  • 写回答

5条回答 默认 最新

  • 徐福记456 2016-12-11 07:48
    关注

    建议你结构改成这样:

     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、既然是开启子线程获取验证码,应该在主线程获取结果,这里面不清楚你是怎么操作的。可以的话,把相关代码分享出来

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复