如何使用处理程序在后台运行任务
问题描述:
我正在使用以下代码来访问Web服务,并向我显示错误应用程序没有响应。如何使用处理程序在后台运行任务
package com.android.webservice;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class WebServiceActivity extends Activity {
private static final String SOAP_ACTION = "http://tempuri.org/HelloWorld";
private static final String METHOD_NAME = "HelloWorld";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://192.168.1.19/TestWeb/WebService.asmx";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button getquote = (Button) findViewById(R.id.getquote);
getquote.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
TextView result1;
result1=(TextView)findViewById(R.id.result1);
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
EditText CompanyName = (EditText) findViewById(R.id.CompanyName);
String val1 = (CompanyName.getText().toString());
request.addProperty("passonString", val1);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
Object result = (Object)envelope.getResponse();
result1.setText(result.toString());
} catch (Exception e) {
result1.setText(e.getMessage());
}
}
});
}
}
可能是因为这是在UI线程中运行,我想用处理程序后台运行它,我在这个领域很新,所以有poroblem把它写在后台线程。任何人都可以请给我指示,如何编写处理程序内的代码。 谢谢
答
试试这个:: AsyncTask使适当和简单的使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。
异步任务由在后台线程上运行并且其结果在UI线程上发布的计算定义。异步任务是由3种一般类型,称为PARAMS,进展和结果,以及4个步骤所定义,称为onPreExecute,doInBackground,onProgressUpdate和onPostExecute
private class xyz extends AsyncTask<Void, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(tranning.this);
@Override
protected void onPreExecute() {
this.dialog.setMessage("Please Wait...");
this.dialog.show();
// put your code which preload with processDialog
}
@Override
protected Void doInBackground(Void... arg0) {
// put your code here
return null;
}
@Override
protected void onPostExecute(final Void unused) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
}
}
和在主::使用此
new xyz().execute();
For more Elaboration
。 。 。 。 。 。 。 。 。 。
。 。 。 。 。 。
。 。 。 。
。 。
。
谢谢,因为我想更新我在response..what UI我应该做的.. – Ritu
在执行前取方法从服务器数据并在后台UI更新 –
@NikPatel为什么最后的点? – OrhanC1