[操作疑難] Android button 唔work

是甘的各位Ching,我宜家想寫個電話簿app,我岩岩寫好個歡迎畫面,但係裏面最重要個submit button 唔work,希望大家教下小弟點解決。謝謝。
program code 如下(我系學pascal出身既中學生,所以有D expression會唔多符合java 既慣例...)

(個program起初已經declare 左個submit button... database 系SQLite)

final button submit=(Button) findViewById(R.id.submitbtn)
.......
......
......

submit.setOnClickListener(new View.OnClickListener() {
                boolean c_name, c_sex, c_hphone, c_mphone, c_address, c_email, c_birth;// 呢炸野系用黎check D 輸入資料合唔合規格....
                String in_name, in_sex, in_hphone, in_mphone, in_address, in_email, in_birth;

                public void onClick(View v) {
                    in_name = (String) name.getText().toString(); // 用黎check 個姓名欄有無空左
                    c_name=false;
                    if (in_name == "") {
                        c_name = false;
                    } else c_name = true; //This cannot check number & symbols in the name


                    in_sex = (String) name.getText().toString();
                    c_sex=false;
                    if (in_sex != "Male") {
                        c_sex = false;
                    } else if (in_sex != "Female") {
                        c_sex = false;
                    } else if (in_sex != "M") {
                        c_sex = false;
                    } else if (in_sex != "F") {
                        c_sex = false;
                    } else c_sex = true; // 用黎check 男女 入得岩唔岩

                    in_hphone = (String) hphone.getText().toString();
                    c_hphone=false;
                    if (hphone == null) {
                        c_hphone = false;
                    } else if (hphone.length() < 8 || hphone.length() > 8) {
                        c_hphone = false;
                    } else c_hphone = true; //用黎check 屋企電話系咪空左/ 唔系8個數字

                    in_mphone = (String) mphone.getText().toString();
                    c_mphone=false;
                    if (mphone == null) {
                        c_mphone = false;
                    } else if (mphone.length() < 8 || mphone.length() > 8) {
                        c_mphone = false;
                    } else c_mphone = true; //功能同屋企電話個個一樣

                    in_address = (String) address.getText().toString();
                    c_address=false;
                    if (in_address == null) {
                        c_address = false;
                    } else c_address = true; // 用黎check 個地址欄有無空左

                    in_birth = (String) address.getText().toString();
                    c_birth=false;
                    if (in_birth == null) {
                        c_birth = false;
                    } else c_birth = true; // 用黎check 個生日日期欄有無空左

                    if (c_birth & c_address & c_email & c_hphone & c_mphone & c_name & c_sex) {
                        Record record1 = new Record(0, in_name, in_sex, in_birth, in_hphone, in_mphone, in_email, in_address); //有一個記錄資料格式既class檔叫record,呢度用黎儲起入左既資料
                        itemDAO.insert(record1); ItemDAO 呢個class 系用作管理database之用,呢度叫itemDAO 入個D 資料落database度
                        Toast t1= Toast.makeText(getApplicationContext(), R.string.Valid, Toast.LENGTH_SHORT); // 入完之後出一個toast 話資料無入錯
                        t1.show();
                        Mainscr_prompt1.setText(R.string.Loading);
                        Intent i = new Intent(Menu_mainscr.this, Contact_Menu.class);//轉畫面去個通訊錄度
                        startActivity(i);
                        Menu_mainscr.this.finish();

                    } else {
                        Toast t2= Toast.makeText(getApplicationContext(), R.string.Invalid, Toast.LENGTH_SHORT);// 如果上面資料有入錯既話,就出一個toast 話有野入錯,要再入過
                        t2.show();
                    }

                }
            });
我見佢無syntax error 就攞去run,整個歡迎畫面都好好,就系個button唔得,唔知點搞好... 求各位Ching指教,小弟不勝感激。

你都要話俾人知點唔得法架...

我估你最大問題係唔知道 java 的 string 係唔可以用 "==" 同 "!=" 黎 check... 咁係check object 唔係 check string 內容.
要用 String.equals("Male");
只有 null 同 "" 用倒 "=="

另外, 點解你咁得意 initialize 個 Boolean 係 false, 跟住又不停咁 check 佢錯, 又入返個 false 俾佢?

TOP

本帖最後由 sfcgta123 於 2015-7-30 17:29 編輯

多謝Ching解答... 我已經改左少少...(用Android Studio 個inspector) 一陣再改埋俾你睇

不過Ching甘講既話,系咪代表個D boolean唔洗一開始set false黎 initialize?

用呢個做例子:
c_sex = Objects.equals(sex.getText().toString(), "Male") && Objects.equals(sex.getText().toString(), "Female") && Objects.equals(sex.getText().toString(), "M") && Objects.equals(sex.getText().toString(), "F") && sex.getText().toString()!= null;

甘樣ok 嗎Ching?

TOP

回覆 2# IanW


    我個app press左個submit之後,無論入岩入錯都出入錯既toast,入岩左都轉唔到畫面haha

TOP

唔駛咁複雜. sex.getText().toString().equals("Male") 就得.
null 你都用 equals 啦.

通常 init 係 false, 就應該係 check positive 黎 set true 吧?
我只係唔知你咁 check 法係有乜特別用意至問一下.

TOP

用CODE BLOCK 可能會易睇D
  1. public  void test(){
  2. }
複製代碼

TOP

ok 多謝Ching解答 problem solved thx

不過宜家下一個問題系個app 找不到database 的cursor...

想問如果我呢個歡迎畫面系個user第一次開個app時候先出(呢時候個database未產生),甘個app點樣寫先可以一開個app就自己gen一個database出黎,之後入個user既data 落去?

TOP

本帖最後由 Charcoal99 於 2015-7-30 21:18 編輯

你個code寫得有點煩瑣,
1.  基本上 check( hphone == null) 是多餘的, 它並不是空字串的意思,
一來你在onCreate() 的時候應該已經 由 findViewById() 來賦值, 它不會是null.
二來就算你忘了這樣做, 那執行這句之前的 hphone.getText().toString() 便會產生
null pointer run-time time exception,  不會到這時才檢測到。
2. boolean 一般可以直接賦值, 寫來會比較簡潔
3. 字串空值一般可以看length()
4. ?phone測試 是否 為 8 為何要用 <8 || >8 而不用 != 8
以下是改了的部份code
註: 假設hphone,mphone 及 birth 已加了 number 及 date 輸入限制, 可以不用trim().
  1. boolean c_name    = name.getText().toString().trim().length() > 0;
  2. String  in_sex    = sex.getText().toString().trim().toUpperCase(Locale.US);
  3. boolean c_sex     = in_sex.equals("MALE") || in_sex.equals("FEMALE") ||
  4.                     in_sex.equals("M")  || in_sex.equals("F");
  5. boolean c_hphone  = hphone.getText().toString().length() == 8;
  6. boolean c_mphone  = mphone.getText().toString().length() == 8;
  7. boolean c_address = address.getText().toString().trim().length() > 0;
  8. boolean c_birth   = birth.getText().toString().length() > 0;

  9. if (c_name && c_sex && c_hphone && c_mphone && c_address && c_birth) {
  10.     ...
  11. }
複製代碼

TOP

本帖最後由 sfcgta123 於 2015-7-30 23:45 編輯

回覆 8# Charcoal99


    收到。 多謝你幫忙,問題已經解決。

宜家個program 突然出現左個問題系無論入岩入錯都可以過到去另一個畫面.... 個validation 形同虛設...
These are the program codes:


submit.setOnClickListener(new View.OnClickListener() {

                boolean c_name, c_sex, c_hphone, c_mphone, c_address, c_email, c_birth;
                @TargetApi(Build.VERSION_CODES.KITKAT)
                public void onClick(View v) {


                    c_name = name.getText()!= null;



                    c_sex = (!Objects.equals(sex.getText().toString(), "Male") || Objects.equals(sex.getText().toString(), "Female") || Objects.equals(sex.getText().toString(), "M") || Objects.equals(sex.getText().toString(), "F") || sex.getText() == null);



                    c_hphone = hphone.getText()!=null && hphone.getText().toString().length() == 8  ;



                    c_mphone = mphone.getText()!= null && mphone.getText().toString().length() == 8;


                    c_address =  address.getText()!= null;



                    c_birth = birth.getText()!= null;


                    c_email = email.getText()!= null;

                    if (c_birth & c_address & c_email & c_hphone & c_mphone & c_name & c_sex) {
                        Record record1 = new Record(0, name.getText().toString(), sex.getText().toString(), birth.getText().toString(), hphone.getText().toString(), mphone.getText().toString(), email.getText().toString(), address.getText().toString());
                        itemDAO.insert(record1);
                        Toast t1 = Toast.makeText(getApplicationContext(), R.string.Valid, Toast.LENGTH_SHORT);
                        t1.show();
                        Mainscr_prompt1.setText(R.string.Loading);
                        Intent i = new Intent(Menu_mainscr.this, Contact_Menu.class);//I don't know if it's works.
                        startActivity(i);
                        Menu_mainscr.this.finish();

                    } else {
                        Toast t2 = Toast.makeText(getApplicationContext(), R.string.Invalid, Toast.LENGTH_SHORT);
                        t2.show();
                    }

                }
            });

邊度出左錯?請指正,謝謝! 我希望可以一次過搞掂呢個page......

TOP

你不能這樣見一步行一步的, 老老實實找個tutorial 做一次吧!
可以參考一吓這一個跟它做一次, http://www.vogella.com/tutorials/AndroidSQLite/article.html

TOP