2012-03-29 8 views
0

これについていくつかのスレッドを読みましたが、私はすでにそれを解決するための対策を講じていました。 私は別のスレッドでUIを更新しないようにハンドラを使用していますが、これまでに何が起こっているのか理解できません。

public class MyApp extends Activity implements OnClickListener, Runnable { 

    private ViewSwitcher switcher; 
    private static final int REFRESH_SCREEN = 1; 
    private boolean isValid = false; 
    private ProgressDialog dialog; 
    private TextView errorMessage;  

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button button = (Button)findViewById(R.id.button1); 
     button.setOnClickListener(this); 

     TextView errorMessage = (TextView)findViewById(R.id.txtErrorMessage); 
     errorMessage.setVisibility(View.GONE); 

     switcher = (ViewSwitcher) findViewById(R.id.profileSwitcher); 
    } 

    public void onClick(View v) 
    { 
     isValid = false; 
     dialog = ProgressDialog.show(ConcentraApp.this, "", "Loading. Please wait...", true); 

     Thread thread = new Thread(this); 
     thread.start(); 
    } 

    public void run() { 
     String username = ((TextView)findViewById(R.id.txtUsername)).getText().toString(); 
     String password = ((TextView)findViewById(R.id.txtPassword)).getText().toString(); 
     errorMessage = (TextView)findViewById(R.id.txtErrorMessage); 
     errorMessage.setVisibility(View.GONE); 

     /* ... contact web service and get response ..*/ 

     try { 
      /* get result from web service */ 
      isValid = Boolean.parseBoolean(result); 
      if(isValid) 
      { 
       handler.sendEmptyMessage(1);     
      } 
      else 
      { 
       handler.sendEmptyMessage(0);  
      } 

     } catch (Exception e) { 
      handler.sendEmptyMessage(2); 
      isValid = false;   
     }            
    } 

    private Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      if(msg.what == 1) 
      { 
       errorMessage.setVisibility(View.VISIBLE); 
       errorMessage.setText("Correct login"); 
       switcher.showNext(); 
      } 
      else if(msg.what == 0) 
      { 
       errorMessage.setVisibility(View.VISIBLE); 
       errorMessage.setText("Invalid login"); 
      } 
      else 
      { 
       errorMessage.setVisibility(View.VISIBLE); 
       errorMessage.setText("Internet error"); 
      } 
      dialog.dismiss(); 
     } 
     }; 
} 

私は非常にこれに新しいので、私は明らかに何かが不足している場合私は驚くことはありません。 スレッドなしで正常に動作しますが、プロセスダイアログは表示されません。あなたはこれを呼び出すことはできません事前

答えて

1

感謝:バックグラウンドスレッドから

errorMessage.setVisibility(View.GONE); 

。また、ハンドラを介して行う必要があります。

+0

はい、それをしました!ありがとう、ジル! – Nick