0

Android アプリケーションで問題が発生しました。100 万のハンドラーを作成する代わりに、1 つのハンドラーに複数のメッセージを入れることができるように、スイッチを作成する必要があります。これが私のコードです:

String text1 = spinner1.getSelectedItem().toString().trim();
String text2 = spinner2.getSelectedItem().toString().trim();

dialog1 = ProgressDialog.show(getActivity(), "", "Calculating...");

        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(0);
                    convertvalues("USD", "EUR");
                    }
                    catch (Exception e) {

                    }

                }
            });
            thread.start();
        }

public Handler handler = new Handler () {
    public void handleMessage(android.os.Message msg) {
        dialog1.dismiss();
        convertvalues("USD", "EUR");
        }
    }
;

これは機能しますが、次のように、複数の if ステートメントに対してより多くのメッセージを作成したいと考えています。

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(0);
                    convertvalues("USD", "EUR");
                    }
                    catch (Exception e) {

                    }

                }
            });
            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(0);
                    convertvalues2("EUR","USD");
                    }
                    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(0);
                    convertvalues("EUR","USD");
                    }
                    catch (Exception e) {

                    }

                }
            });
            thread.start();
        }

どうすればこれを達成できますか? スイッチが付いているか、それとも何か他のものですか。どんな助けでも大歓迎です。

PS私は初心者なので、回答とともにコードを投稿していただければ幸いです。それは素晴らしいことです。そしてもう一度、ありがとう。

4

2 に答える 2

0

代わりに変数を使用します。変更されたものを抽出し、それを中心にコードを作成してみてください。あなたの場合、呼び出しはconvertvalues2さまざまであるため、引数を変数に抽出して使用します。

final String fromCurrency = text1.substring(text1.length() - 3);
final String toCurrency = text2.substring(text2.length() - 3);
new Thread(new Runnable() {
    @Override
    public void run() {
        try{
            handler.sendEmptyMessage(0);
            convertvalues2(fromCurrency, toCurrency);
        }
        catch (Exception e) {
        }
     }
});
于 2013-08-04T23:58:54.893 に答える
0

Java の switch ステートメントは、int と enum、およびその他のいくつかの型で機能します。

したがって、あなたの場合、スイッチをオンにしたい可能性のある値を保持するために列挙型をセットアップすることができます。

    public enum Currency{
    USD, 
    EUR
}

private void test(Currency currency){
    switch (currency){
    case USD:
        doUsdStuff();
        break;
    case EUR:
        doEurStuff();
        break;
    }
}

または、列挙型の代わりに int 値を宣言することもできます。

2 つの値があるため、2 つの switch ステートメントを実行して、それぞれの値を保存してから、保存した値を使用して convertValues() を 1 回呼び出します。

于 2013-08-04T23:47:42.267 に答える