2012-08-23 26 views
2

我有一個Android活動來顯示Web服務的輸出。我在另一個擴展AsyncTask的私有類中調用了Web服務,並且想要將值返回給主UI線程。使用AsyncTask並將值返回到UI主線程

這是我的活動。

public class CallCalcService extends Activity { 

private String METHOD_NAME = "sum"; // our webservice method name 
private String NAMESPACE = "http://backend.android.web.org"; 

private String SOAP_ACTION = NAMESPACE + METHOD_NAME; 

private static final String URL = "http://192.168.1.14:8080/AndroidBackend1/services/Calculate?wsdl"; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_call_calc_service); 

    //TextView tv = (TextView) findViewById(R.id.textView1); 
    //Object res=new HardWorkThread().execute(); 
    //tv.setText("Addition : "+ res.toString()); 

    new HardWorkThread() 
    { 
     public void onPostExecute(String result) 
     { 
      TextView txt = (TextView) findViewById(R.id.textView1); 
      txt.setText("Addition : "+result); 
     } 
    }.execute(""); 



} 

private class HardWorkThread extends AsyncTask{ 

    @Override 
    protected String doInBackground(Object... params) { 
     // TODO Auto-generated method stub 
     String result=null; 
     try { 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      request.addProperty("i", 5); 
      request.addProperty("j", 15); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11); 
      envelope.dotNet = true; 
      envelope.setOutputSoapObject(request); 
      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
      androidHttpTransport.call(SOAP_ACTION,envelope); 

      result = envelope.getResponse().toString(); 
      System.out.println("Result : " + result); 
      //((TextView) findViewById(R.id.textView1)).setText("Addition : "+ result.toString()); 
     } catch (Exception E) { 
      E.printStackTrace(); 
      //((TextView) findViewById(R.id.textView1)).setText("ERROR:" 
       // + E.getClass().getName() + ":" + E.getMessage()); 
     } 
     return result; 
    } 



} 

}

我想要做的就是字符串結果值返回到主界面,這樣我就可以設置該值TextView的。

String result; 

TextView tv=findViewById(R.id.textView1); 
tv.setText(result); 

我該怎麼做?

回答

2

你應該OverrideonPostExecute()方法。

事情是這樣的:

 @Override 
    protected void onPostExecute(String result) { 
     TextView tv = findViewById(R.id.textView1); 
     tv.setText(result); 
    } 
+0

非常感謝,現在它工作。 – erandi

+0

不客氣 – SAbbasizadeh