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