如何使用处理程序在后台运行任务

问题描述:

我正在使用以下代码来访问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
。 。 。 。 。 。 。 。 。 。
。 。 。 。 。 。
。 。 。 。
。 。

+0

谢谢,因为我想更新我在response..what UI我应该做的.. – Ritu

+0

在执行前取方法从服务器数据并在后台UI更新 –

+0

@NikPatel为什么最后的点? – OrhanC1

你应该使用AysncTask做这项工作的背景

http://labs.makemachine.net/2010/05/android-asynctask-example/