2013-08-02 2 views
1

Android 애플리케이션에서 문제가 발생했습니다. 나는 통화 변환기를 만들고 있습니다. 한 통화에서 다른 통화로 값을 변환 할 때 나타나는 진행 대화 상자를 만들어야합니다.데이터로드 중 ProgressDialog

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

       } 
      }); 
      thread.start(); 
     } 
private Handler handler = new Handler() { 
    public void handleMessage(android.os.Message msg) { 
     switch (msg.what) { 
     case 0: 
     dialog1.dismiss(); 
     break; 
     } 
    } 
}; 

해서 ProgressDialog가 나타나고 사라집니다,하지만 아무것도 백그라운드에서 발생하지 : 여기

내 코드의 일부입니다.

가해서 ProgressDialog가 제공

Before ProgressDialog

이되기 전에 : 여기에 내 응용 프로그램과 같은 모습의 소수의 담당자입니다.

내가 계산 누르면 다음해서 ProgressDialog 완료 후

When I press calculate

: 당신이 볼 수 있듯이해서 ProgressDialog가 종료하면

After the progressdialog goes

, 제 값을 변환하지 않습니다. 내 코드에서

,

convertvalues("USD", "EUR"); 

은 인터넷에서 실제 통화 값을 가져옵니다 내 글고의 값을 곱합니다. 거기에는 아무런 문제가 없으며 진행 과정이 없어도 작동합니다. 나는 여러 번 나 자신을 시험했다.

내가 뭘 잘못하고 있니? 1 주일 이상 Google을 확인했지만 단일 솔루션을 찾을 수 없습니다. 이 문제와 관련된 도움을 주시면 감사하겠습니다.

+0

으로이 AsyncTask를 호출 할 수있는' EditText'? – codeMagic

답변

0

핸들러에서 progressdialog를 업데이트하는 것과 마찬가지로 UI 스레드에서 실행해야하므로 핸들러에서 EditText를 업데이트해야합니다. 그래서 이상적으로 당신은 convertvalues에서 결과를 반환하고 메시지를 통해 처리기로 전달합니다.

0

내가 볼 수 있듯이 코드는 괜찮지 만 대화 상자를 닫을 때 TextView/EditText 값을 업데이트하지 않습니다. 즉, 아무 일도 일어나지 않았음에도 불구하고 결과는 실제로 업데이트되지 않습니다.

따라서 convertvalues()에 변환 값이 저장되어 있다고 가정하면 dismiss()을 호출하기 전에 해당 값을 기준으로 TextViews를 설정해야합니다.

0

당신은 코드가 도움이 될 수 있습니다 .. 다음을 참조하십시오 안드로이드

private class asyncTask extends AsyncTask<Void, Void, Boolean> 
    { 
     Context context; 
     ProgressDialog pd; 

     asyncTask(Context context) 
     { 
      this.context = context; 
      pd = new ProgressDialog(activityContext); 

     } 
     protected void onPreExecute() 
     { 
      pd.setTitle("Loading.."); 
      pd.setMessage("Please wait ..."); 
      pd.setCancelable(false); 
      pd.show(); 
     } 
     protected void onPostExecute(Boolean result) 
     { 
      if(pd.isShowing()) pd.dismiss(); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) 
     { 
      convertvalues(); 

      return boolean_value; 
     } 
} 

을 AsyncTask를 사용하고 업데이트하는 경우에는 그냥

new asyncTask(Your_Context).execute();