简体   繁体   中英

Program exiting when no input given and alert dialog not fixing the error

Here's the Program, it works and all but when I Pull the seek bar when there is not number in the input box the program exits and the alert dialog is not doing its job even though i put a try and catch on the code.

 public class MainActivity extends Activity {

    private SeekBar sbCash;
    private Button btnten,btntwenty,btnthirty;
    private TextView tvShwProg,tvfinal;
    private EditText etCash;
    final Context context = this;


    @Override
    public void onCreate(Bundle savedInstanceState)
    {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etCash = (EditText)findViewById(R.id.etCash);
        sbCash = (SeekBar)findViewById(R.id.sbCash);
        tvShwProg = (TextView)findViewById(R.id.tvShwProg);
        tvfinal = (TextView)findViewById(R.id.tvFinal);
        btnten = (Button)findViewById(R.id.btnten);
        btntwenty = (Button)findViewById(R.id.btntwenty);
        btnthirty = (Button)findViewById(R.id.btnthirty);

        etCash.addTextChangedListener(new TextWatcher(){

            public void afterTextChanged(Editable arg0) 
            {


            }
            public void beforeTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) 
            {

            }
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {

                try{
                guiChanged();
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                    errormessage();
                }
            }


        });


        SeekBar.OnSeekBarChangeListener sbListener = new SeekBar.OnSeekBarChangeListener() 
        {
            public void onStopTrackingTouch(SeekBar seekBar) {}
            public void onStartTrackingTouch(SeekBar seekBar) {}
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 
            {
                try{
                guiChanged();
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                    errormessage();

                }
            }


        };
        sbCash.setOnSeekBarChangeListener(sbListener);

        dosomethig();
        dosomethig2();
        dosomething3(); 
    }

    public AlertDialog errormessage()
    {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setMessage("Fire Missile?")
               .setPositiveButton("Exit!", new DialogInterface.OnClickListener() 
               {
                   public void onClick(DialogInterface dialog, int id) 
                   {
                       // FIRE ZE MISSILES!
                   }
               })
               .setNegativeButton("Fix", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }


    public void guiChanged()
    {
            try{
                DecimalFormat fmt = new DecimalFormat ("0.00");

                int CashMoney = sbCash.getProgress();

                tvShwProg.setText("Current Percentage " +CashMoney+ "%");

                double amount = Double.parseDouble(etCash.getText().toString());

                double moneydue = (amount * (CashMoney/100.0));

                double totalamount = (moneydue + amount);

                tvfinal.setText("Tip " + fmt.format(moneydue)+ " Total "+ fmt.format(totalamount));
            }
            catch(Exception e)
            {
                errormessage();
                e.printStackTrace();

                etCash.setText("Bro enter a number here");
            }

    }            


    public void dosomethig()
    {

        btnten.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                sbCash.setProgress(10);


            }
        });
    }
    public void dosomethig2()
    {

        btntwenty.setOnClickListener(new View.OnClickListener() 
        {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                sbCash.setProgress(15);
            }


        });
    }
    public void dosomething3()
    {
        btnthirty.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                sbCash.setProgress(20);

            }
        });
    }

Logcat:

   05-12 19:44:27.144: E/ActivityManager(71): ANR in com.Shashank.nchs.Final_exam.hayes (com.Shashank.nchs.Final_exam.hayes/.MainActivity)
    05-12 19:44:27.144: E/ActivityManager(71): Reason: keyDispatchingTimedOut
    05-12 19:44:27.144: E/ActivityManager(71): Load: 0.57 / 0.57 / 0.27
    05-12 19:44:27.144: E/ActivityManager(71): CPU usage from 21865ms to -1ms ago:
    05-12 19:44:27.144: E/ActivityManager(71):   12% 431/com.Shashank.nchs.Final_exam.hayes: 10% user + 1.9% kernel / faults: 1929 minor 1 major
    05-12 19:44:27.144: E/ActivityManager(71):   0.4% 176/logcat: 0.2% user + 0.2% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   1.3% 41/adbd: 0.1% user + 1.1% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   1.3% 71/system_server: 1% user + 0.2% kernel / faults: 102 minor
    05-12 19:44:27.144: E/ActivityManager(71):   0% 124/jp.co.omronsoft.openwnn: 0% user + 0% kernel / faults: 22 minor
    05-12 19:44:27.144: E/ActivityManager(71):   0.4% 141/com.android.launcher: 0.2% user + 0.1% kernel / faults: 50 minor
    05-12 19:44:27.144: E/ActivityManager(71):   0.3% 199/android.process.acore: 0.3% user + 0% kernel / faults: 39 minor
    05-12 19:44:27.144: E/ActivityManager(71):   0.2% 255/com.android.quicksearchbox: 0.1% user + 0% kernel / faults: 315 minor
    05-12 19:44:27.144: E/ActivityManager(71):   0.2% 267/com.android.defcontainer: 0.2% user + 0% kernel / faults: 37 minor
    05-12 19:44:27.144: E/ActivityManager(71):   0% 31/surfaceflinger: 0% user + 0% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   0% 115/com.android.systemui: 0% user + 0% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   0% 136/com.android.phone: 0% user + 0% kernel / faults: 3 minor
    05-12 19:44:27.144: E/ActivityManager(71): 34% TOTAL: 24% user + 9.1% kernel + 0.5% softirq
    05-12 19:44:27.144: E/ActivityManager(71): CPU usage from 1008ms to 1562ms later:
    05-12 19:44:27.144: E/ActivityManager(71):   53% 431/com.Shashank.nchs.Final_exam.hayes: 48% user + 5% kernel / faults: 265 minor
    05-12 19:44:27.144: E/ActivityManager(71):     32% 431/inal_exam.hayes: 30% user + 2.5% kernel
    05-12 19:44:27.144: E/ActivityManager(71):     8.7% 434/GC: 8.7% user + 0% kernel
    05-12 19:44:27.144: E/ActivityManager(71):     2.5% 437/Compiler: 2.5% user + 0% kernel
    05-12 19:44:27.144: E/ActivityManager(71):     1.2% 433/HeapWorker: 1.2% user + 0% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   5.4% 71/system_server: 3.6% user + 1.8% kernel / faults: 5 minor
    05-12 19:44:27.144: E/ActivityManager(71):     5.4% 95/InputDispatcher: 1.8% user + 3.6% kernel
    05-12 19:44:27.144: E/ActivityManager(71):     1.8% 76/Compiler: 1.8% user + 0% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   5.4% 176/logcat: 3.6% user + 1.8% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   3.7% 371/com.svox.pico: 3.7% user + 0% kernel / faults: 26 minor
    05-12 19:44:27.144: E/ActivityManager(71):     2.4% 371/com.svox.pico: 2.4% user + 0% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   3.6% 41/adbd: 1.8% user + 1.8% kernel
    05-12 19:44:27.144: E/ActivityManager(71):     7.2% 41/adbd: 3.6% user + 3.6% kernel
    05-12 19:44:27.144: E/ActivityManager(71):     3.6% 161/adbd: 1.8% user + 1.8% kernel
    05-12 19:44:27.144: E/ActivityManager(71):     1.8% 162/adbd: 0% user + 1.8% kernel
    05-12 19:44:27.144: E/ActivityManager(71):   1.1% 267/com.android.defcontainer: 1.1% user + 0% kernel
    05-12 19:44:27.144: E/ActivityManager(71): 100% TOTAL: 85% user + 14% kernel

when no input given and alert dialog not fixing the error

because currently you are returning AlertDialog.Builder instance from errormessage() method and not calling AlertDialog.show() for showing Dialog. so you will need to alert.show() to show AlertDialog . do it as:

      try{
          guiChanged();
        }
        catch(Exception e)
        {
            e.printStackTrace();
            AlertDialog alert =errormessage();
             alert.show(); //<<< show AlertDialog here
        }

There are better ways to get sure that there is an input at Your editText etCash. I don´t know exactly what You are trying to do, but if the user should give some input into the etCash, You can get sure, that there is only a number input by setting this attributes to Your etCash inside xml layout. For example:

        android:inputType="number"

or

        android:inputType="numberDecimal"

or

        android:inputType="numberSigned"

this depends on what You want. I think in Your case, "numberDecimal" is the best way.

Also, You can check before parsing:

     if(etCash.getText().toString().length()<1){
              //show warning
     }

If you want to check if input is a number:

    private boolean isNumeric(String str){

for (char c : str.toCharArray())
    {
    if (!Character.isDigit(c)) return false;
     }
   return true;
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM