2013-05-08 60 views
1

我對Android非常陌生,希望任何人都可以幫助我。 每當我使用OnclickListener執行Asynctask時,程序都會崩潰。如果我在不使用onclicklistener的情況下執行Asynctask,則測試程序正常工作。Asynctask在OnclickListener中崩潰

public class MainActivity extends Activity { 

TextView label; 
Button start; 
MyAsyncTask test; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    label = (TextView)findViewById(R.id.tvIndicator); 
    start = (Button)findViewById(R.id.btSend); 

    test = new MyAsyncTask(); 

    start.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      test.execute(); 
     } 
    });  
} 

public class MyAsyncTask extends AsyncTask{ 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("htt://****.php");//left out the address 

    @Override 
    protected Object doInBackground(Object... params) { 
     // TODO Auto-generated method stub 

      label.setText("Please Work"); 

      String MyName = "testing"; 
      String response = null; 
      try { 

      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
      nameValuePairs.add(new BasicNameValuePair("emailAdd", MyName)); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
      response = httpclient.execute(httppost, responseHandler); 

      label.setText(response.length()); 
      return response; 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     return null; 
    } 
} 

}

回答

3

不能更新從UI Thread iteself不同Thread UI元素。你必須使用一個Handler或使用runOnUiThread

例如

runOnUiThread(new Runnable() { 
     public void run() { 
     label.setText("Please Work"); 
     } 
}); 
+0

太好了!它在移動我的labelsettext後起作用。謝謝。 – asun 2013-05-08 10:21:16