2012-10-14 44 views
1

我有在android系統處理的一個問題,我不明白,不顯示結果,這是代碼:爲什麼的handleMessage不工作

public class Main extends Activity implements OnClickListener { 

private EditText nhap; 
private Button btTinh; 
private Button btHuy; 
private TextView kq; 
private ProgressDialog progress; 
private Handler handle = new Handler(); 
private int count = 0; 
private String s = ""; 
private long n; 

的handleMessage:

Handler mhandle = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     kq.setText(msg.obj.toString()); 
    } 
}; 

的onCreate:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    nhap = (EditText) findViewById(R.id.nhap); 
    btTinh = (Button) findViewById(R.id.btTinh); 
    btHuy = (Button) findViewById(R.id.btHuy); 
    kq = (TextView) findViewById(R.id.kq); 
    btTinh.setOnClickListener(this); 
    btHuy.setOnClickListener(this); 
} 

public boolean checkPrime(long n) { 
    for (int i = 2; i <= Math.sqrt(n); i++) { 
     if (n % i == 0) 
      return false; 
    } 
    return true; 
} 

outprime:

public void outPrime(long t) { 
    // String s=""; 
    progress.setCancelable(true); 
    progress.setMessage("File downloading ..."); 
    progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    progress.setProgress(0); 
    progress.setMax(Integer.parseInt(nhap.getText().toString())); 
    progress.show(); 
    n = t; 
    new Thread() { 
     public void run() { 
      for (int i = 2; i < n; i++) { 
       count = i; 
       if (checkPrime(i)) 
        s = s + i + " "; 
       handle.post(new Runnable() { 

        public void run() { 
         // TODO Auto-generated method stub 
         progress.setProgress(count); 
        } 
       }); 


      } 
      if (count == n - 1) { 
       progress.dismiss(); 
       Message msg = handle.obtainMessage(1, (String)s); 
       handle.sendMessage(msg); 
      } 

     } 
    }.start(); 


} 

的onclick:

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.btTinh: 
     progress = new ProgressDialog(this); 
     outPrime(Long.parseLong(nhap.getText().toString())); 
     break; 
    case R.id.btHuy: 
     nhap.setText(""); 
     break; 
    } 
}} 

這是的handleMessage:

Handler mhandle = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     kq.setText(msg.obj.toString()); 
    } 
}; 

我不明白的handleMessage沒有返回值, 「kq.setText(msg.obj.toString());」不要顯示到屏幕上,對不起,因爲我的英文不好

+0

返回類型爲'void'時handleMessage'返回值怎麼樣? – Abubakkar

+0

oh no,它的意思是「kq.setText(msg.obj.toString());」不要顯示到屏幕 – rocky

+0

sr,我是新的參與,所以我不知道 – rocky

回答

1

我想你的問題的答案是「小心你的變量的名字!看 - 你已經創建了2個處理程序 - 名爲「mhandle」和「句柄」。你想在Handler中解析消息,命名爲「mhandle」,但是在你的Thread中發送它給「handle」,這不會對你的代碼做任何事情。 希望它會幫助,如果你仍然試圖找到答案。