2013-08-04 3 views
0

Android 애플리케이션에서 문제가 발생했습니다. 백만 개의 핸들러를 만드는 대신 핸들러에 여러 메시지를 넣을 수 있도록 스위치를 만들어야합니다. 여기 내 코드입니다 :처리기에서 전환하기 (ProgressDialog)

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 (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(); 
     } 

어떻게 이것을 달성합니까? 스위치가 달린 것입니까? 어떤 도움이라도 대단히 감사합니다.

P. 초급자이기 때문에 답변을 포함하여 코드를 게시하면 좋을 것입니다. 그게 좋을거야. 그리고 다시 한번 감사드립니다.

답변

0

java의 switch 문은 int 및 enum과 몇 가지 other types으로 작동합니다.

그래서 귀하의 경우에는 전환 할 수있는 가능한 값을 보유하도록 열거를 설정할 수 있습니다.

public enum Currency{ 
    USD, 
    EUR 
} 

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

또는 enum 대신 int 값을 선언 할 수 있습니다.

두 개의 값이 있으므로 두 개의 switch 문을 사용하여 각각의 값을 저장 한 다음 convertValues ​​()에 저장된 값으로 한 번 호출 할 수 있습니다.

+0

하지만 어떻게 if/then 문에서 이것을 호출합니까? – user2507301

+1

스위치의 목적은 여러 if/else 문을 제거하는 것입니다. –

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) { 
     } 
    } 
});