Módulo client (Android) |
Top Previous Next |
|
Tela Ao digitar 1 e pressionar o botão este é o resultado:
Biblioteca necessária
Tipo.java
package com.junior;
public class Tipo {
public int Codigo; public String Nome;
public Tipo(int acodigo, String anome) { Codigo = acodigo; Nome = anome; }
public Tipo(String WebServiceStr) {
if (WebServiceStr.indexOf(";") > 0) { try { Codigo = Integer.parseInt(WebServiceStr.split(";")[0]); Nome = WebServiceStr.split(";")[1]; } catch (Exception e) {
} } }
@Override public String toString() { return String.valueOf(Codigo) + "-" + Nome; } }
PegarListaActivity.java
package com.junior;
import java.util.ArrayList;
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.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.util.Log; 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 PegarListaActivity extends Activity implements OnClickListener, Runnable {
// associamos as constantes com informações necessárias para acessar o webservice private static final String SOAP_ACTION = "http://www.servico.market.com.br/GetTipos"; private static final String METHOD_NAME = "GetTipos"; private static final String NAMESPACE = "http://www.servico.market.com.br/"; private static final String URL = "http://www.servico.market.com.br/Lista.asmx";
// componentes visuais TextView tvResposta; Button btConsultar; EditText edCodigo;
// handler usado para atualizar a view private Handler handler = new Handler(); private ProgressDialog dialog; private Object result;
// lista de objetos que retorna do webservice private ArrayList<Tipo> Tipos;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
// cria a lista de retorno vazia Tipos = new ArrayList<Tipo>(); AssociarComponentes(); }
private void AssociarComponentes() { tvResposta = (TextView) findViewById(R.id.tvResposta); edCodigo = (EditText) findViewById(R.id.edCodigo); btConsultar = (Button) findViewById(R.id.btConsultar); btConsultar.setOnClickListener(this); }
public void onClick(View v) { dialog = ProgressDialog.show(this, "Exemplo", "Buscando texto, aguarde...", false, true); // faz o download numa thread new Thread(this).start(); }
public void run() {
try { // pega o codigo que o usuario digitou int codigo = Integer.parseInt(edCodigo.getText().toString());
// monta o protocolo de comunicao SOAP associando o webmethod SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // passa o codigo por parâmetro request.addProperty("Codigo", codigo); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request);
// este HttpTransport fará o envio e leitura de resposta HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); try { // chama função androidHttpTransport.call(SOAP_ACTION, envelope);
// obtem a resposta result = (Object) envelope.getResponse();
// esta função pega a resposta e verifica se está ok if (MontarArrayList(result.toString())) { // precisa do handler para atualizar a view de outra thread handler.post(new Runnable() { public void run() { // só para mostrar algo 'visual' String retorno = "quant: " + String.valueOf(Tipos.size()) + "\n"; for (Tipo t : Tipos) { retorno += t.toString() + "\n"; } tvResposta.setText(retorno); } }); } else Toast.makeText(PegarListaActivity.this, "Erro ao receber resposta", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); } } catch (Throwable e) { Log.e("Erro", e.getMessage(), e); } finally { dialog.dismiss(); } }
private boolean MontarArrayList(String webStr) { // vamos ver se o retorno é válido! if (webStr.length() > 0 && webStr.indexOf("|") > 0) { // vamos separar cada objeto um "|" Tipos.clear(); String[] tipos = webStr.split("\\|"); for (String s : tipos) { Tipo t = new Tipo(s); Tipos.add(t); } return true; } else return false; } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Digite o código" />
<EditText android:id="@+id/edCodigo" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="number" >
<requestFocus /> </EditText>
<Button android:id="@+id/btConsultar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Consultar" />
<TextView android:id="@+id/tvResposta" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Resposta" />
</LinearLayout>
Manifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.junior" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".PegarListaActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
</manifest>
Observações Para maior segurança pode-se criptografar a string de envio/recebimento |