-1

我在我的 Android 应用程序中遇到了一个问题,我的 switch/case 语句在我的处理程序中不起作用。我做 switch/case 语句的主要原因是限制我拥有的处理程序的数量。这是我的代码的一部分:

if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR")
                && edittextdollars.length() > 0
                && edittexteuros.length() == 0) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        handler.sendEmptyMessage(2);
                        convertvalues("USD", "EUR");
                        img1.setImageDrawable(grabImageFromUrl(imageUrl1));
                    } catch (Exception e) {
                        edittexteuros.setText("Error");
                    }

                }
            });
            thread.start();

        }

        if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR")
                && edittexteuros.length() > 0
                && edittextdollars.length() == 0) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        handler.sendEmptyMessage(3);
                        convertvalues2("EUR", "USD");
                        img1.setImageDrawable(grabImageFromUrl(imageUrl2));
                    } catch (Exception e) {

                    }

                }
            });
            thread.start();

        }
        if (text1.equals("Euro - EUR") && text2.equals("US Dollar - USD")
                && edittextdollars.length() > 0
                && edittexteuros.length() == 0) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        handler.sendEmptyMessage(4);
                        convertvalues("EUR", "USD");
                        img1.setImageDrawable(grabImageFromUrl(imageUrl2));
                    } catch (Exception e) {

                    }

                }
            });
            thread.start();
        }
        if (text1.equals("Euro - EUR") && text2.equals("US Dollar - USD")
                && edittexteuros.length() > 0
                && edittextdollars.length() == 0) {
            convertvalues2("USD", "EUR");
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        handler.sendEmptyMessage(5);
                        convertvalues2("USD", "EUR");
                        img1.setImageDrawable(grabImageFromUrl(imageUrl2));
                    } catch (Exception e) {

                    }

                }
            });
            thread.start();
        }
        if (text1.equals("Euro - EUR") && text2.equals("Euro - EUR")
                && edittextdollars.length() > 0
                && edittexteuros.length() == 0) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        handler.sendEmptyMessage(6);
                        convertEurostoEuros();
                        //img1.setImageDrawable(grabImageFromUrl(imageUrl1));
                    } catch (Exception e) {

                    }

                }
            });
            thread.start();
        }
        if (text1.equals("Euro - EUR") && text2.equals("Euro - EUR")
                && edittexteuros.length() > 0
                && edittextdollars.length() == 0) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        handler.sendEmptyMessage(7);
                        OppositeOfConvertEurostoEuros();
                    } catch (Exception e) {

                    }

                }
public Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            dialog1.dismiss();
            try {
            switch (msg.what) {
            case 2:
                img1.setImageDrawable(grabImageFromUrl(imageUrl1));
                convertvalues("USD", "EUR");
            break;
            case 3:
                convertvalues2("EUR", "USD");
                img1.setImageDrawable(grabImageFromUrl(imageUrl2));
            break;
            case 4:
                convertvalues("EUR", "USD");
                img1.setImageDrawable(grabImageFromUrl(imageUrl2));
            break;
            case 5:
                convertvalues2("USD", "EUR");
                img1.setImageDrawable(grabImageFromUrl(imageUrl2));
            break;
            case 6:
                convertEurostoEuros();
            break;
            case 7:
                OppositeOfConvertEurostoEuros();
            break;
            case 8:
                convertDollarstoDollars();
            break;
                        } catch (Exception e) {
                e.printStackTrace();
            }
                         }
                     };

 public String convertvalues(String convertfrom, String convertto) {
        double current;
        double val = Double.parseDouble(edittextdollars.getText()
                .toString());
        DecimalFormat df = new DecimalFormat(".##");
        YahooCurrencyConverter ycc = new YahooCurrencyConverter();
        try {
            current = ycc.convert(convertfrom, convertto);
            edittexteuros.setText(df.format(val * current));
            return "passed";
        } catch (Exception e) {

            return "passed";
        }
    }

    public String convertvalues2(String convertfrom2, String convertto2) {
        double current;
        double val = Double.parseDouble(edittexteuros.getText().toString());
        DecimalFormat df = new DecimalFormat(".##");
        YahooCurrencyConverter ycc = new YahooCurrencyConverter();
        try {
            current = ycc.convert(convertfrom2, convertto2);
            edittextdollars.setText(df.format(val * current));
            return "passed";
        } catch (Exception e) {

            return "passed";
        }

    }

    protected void convertEurostoEuros() {
        double val = Double.parseDouble(edittextdollars.getText()
                .toString());
        DecimalFormat df = new DecimalFormat(".##");
        edittexteuros.setText(df.format(val*1));
    }

    protected void convertDollarstoDollars() {
        double val = Double.parseDouble(edittextdollars.getText()
                .toString());
        DecimalFormat df = new DecimalFormat(".##");
        edittexteuros.setText(df.format(val*1));
    }

    protected void OppositeOfConvertEurostoEuros() {
        double val = Double.parseDouble(edittexteuros.getText().toString());
        DecimalFormat df = new DecimalFormat(".##");
        edittextdollars.setText(df.format(val * 1));
    }

    protected void OppositeOfConvertDollarstoDollars() {
        double val = Double.parseDouble(edittexteuros.getText().toString());
        DecimalFormat df = new DecimalFormat(".##");
        edittextdollars.setText(df.format(val * 1));
    }

我的应用程序所做的事情是,即使我想找到 INR 到 JPY 的汇率,它也会找到 USD 到 EUR 的汇率。为什么这样做?是因为这是我放入处理程序的第一个案例吗?非常感谢有关此问题的任何帮助。

4

1 回答 1

0

您的代码非常混乱,并导致许多问题。您可以通过执行以下操作大大清理此设计并消除许多此类问题:

  1. text1或的值text2直接转换为YahooCurrencyConverter代码。现在你有一个 from 代码和一个 to 代码。究竟如何做到这一点实际上取决于什么text1text2是什么 - 您可以将 UI 文本映射存储到转换代码,或使用普通的旧if语句,或使用 anenum来备份所有这些,或其他。
  2. 如果 from 和 to 货币相同,则无需转换。
  3. 如果 from 和 to 货币不同,请将转换代码传递给 toYahooCurrencyConverter并让它完成工作。

伪代码示例:

String code1 = getCurrencyCodeFromUI(text1);
String code2 = getCurrencyCodeFromUI(text2);

double ratio;
if (code1.equals(code2)) {
    ratio = 1.0;
} else {
    YahooCurrencyConverter ycc = ...;
    ratio = ycc.convert(code1, code2); 
}

// now ratio stores the conversion ratio, no matter what combination of
// currencies was indicated by text1 and text2.

wheregetCurrencyCodeFromUI()根据 UI 对象的值获取相应的货币代码。

基本上,您似乎正在为 text1 和 text2 的所有可能组合添加处理程序。相反,如果您先将 text1 和 text2 分别转换为转换代码,则可以让YahooCurrencyConverter处理其余部分。

于 2013-08-14T20:38:44.507 回答