2012-03-29 87 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

是的,它做到了!感謝zil! – Nick 2012-03-29 13:52:30

相關問題