程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> android-Android頁面跳轉失敗(已在AcivityMainfest中聲明過)

android-Android頁面跳轉失敗(已在AcivityMainfest中聲明過)

編輯:編程解疑
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);
}

}

點下“下一步後”的情況
圖片說明
圖片說明

最佳回答:


建議你結構改成這樣:

 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、既然是開啟子線程獲取驗證碼,應該在主線程獲取結果,這裡面不清楚你是怎麼操作的。可以的話,把相關代碼分享出來

linyouhui6
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved