Reputation: 317
I have an Android activity to display the output of a web service. I've called the web service inside another private class which extends AsyncTask, and want to return a value to the main UI thread.
This is my activity.
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;
}
}
}
What I want to do is return the String result value to the main UI, so that I can set that value to the textview.
String result;
TextView tv=findViewById(R.id.textView1);
tv.setText(result);
How might I do this?
Upvotes: 2
Views: 1569
Reputation: 730
You should Override
the onPostExecute()
method.
Something like this :
@Override
protected void onPostExecute(String result) {
TextView tv = findViewById(R.id.textView1);
tv.setText(result);
}
Upvotes: 2