Dúvida em AsyncTask com Webservice

11 respostas
Z

Senhores, boa tarde.

Estou montando uma aplicação Android para comunicar com um Webservice-rest, até então tudo tranquilo, utilizei um exemplo que encontrei na internet e comecei a codificar aqui.
Contudo surgiu um problema, quando realizo o teste da aplicação em uma versão do Android superior a 2.3 o sistema não consegue obter o retorno. Após pesquisar e perguntar em outro fórum descobri que a Google retirou a possibilidade de se chamar métodos que comunicam com a internet no método principal e que um solução para isso seria a utilização do AsyncTask.

Após realizar uma busca pela internet achei um tutorial onde o camarada explica justamente como fazer a comunicação de um Webservice-rest com o Android usando o AsyncTask. Beleza, comecei a ler, tentei fazer aqui, mas não consegui entender o conceito do AsyncTask.

Porque hoje eu tenho o seguinte ambiente aqui:

GrupoProdutoRest.java

package br.com.unip.menudroid.webservice;

import java.util.ArrayList;
import java.util.List;
import br.com.unip.menudroid.model.GrupoProduto;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;

public class GrupoProdutoRest {

	private static final String URL_WS = "http://192.168.0.11:8080/menuDroidWeb/ws/grupoproduto/";
	
	public List<GrupoProduto> getListaGrupoProduto() throws Exception {

		String[] resposta = new GrupoProdutoWS().get(URL_WS + "listar");
		
		if (resposta[0].equals("200")) {
			Gson gson = new Gson();
			ArrayList<GrupoProduto> listaGrupoProduto = new ArrayList<GrupoProduto>();
			JsonParser parser = new JsonParser();
			JsonArray array = parser.parse(resposta[1]).getAsJsonArray();
		    
		    for (int i = 0; i < array.size(); i++) {
		    	listaGrupoProduto.add(gson.fromJson(array.get(i), GrupoProduto.class));
			}
			return listaGrupoProduto;
		} else {
			throw new Exception(resposta[1]);
		}
	}
}

GrupoProdutoWS.java

package br.com.unip.menudroid.webservice;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;

import android.util.Log;

public class GrupoProdutoWS {

	public final String[] get(String url) {

		String[] result = new String[2];
		HttpGet httpget = new HttpGet(url);
		HttpResponse response;

		try {
			response = HttpClientSingleton.getHttpClientInstace().execute(
					httpget);
			HttpEntity entity = response.getEntity();

			if (entity != null) {
				result[0] = String.valueOf(response.getStatusLine()
						.getStatusCode());
				InputStream instream = entity.getContent();
				result[1] = toString(instream);
				instream.close();
				Log.i("post", "Result from post JsonPost : " + result[0]
				                              						+ " : " + result[1]);
			}
		} catch (Exception e) {
			Log.e("NGVL", "Falha ao acessar Web service", e);
			result[0] = "0";
			result[1] = "Falha de rede!";
		}
		return result;
	}

	public final String[] post(String url, String json) {
		String[] result = new String[2];
		try {

			HttpPost httpPost = new HttpPost(new URI(url));
			httpPost.setHeader("Content-type", "application/json");
			StringEntity sEntity = new StringEntity(json, "UTF-8");
			httpPost.setEntity(sEntity);

			HttpResponse response;
			response = HttpClientSingleton.getHttpClientInstace().execute(
					httpPost);
			HttpEntity entity = response.getEntity();

			if (entity != null) {
				result[0] = String.valueOf(response.getStatusLine()
						.getStatusCode());
				InputStream instream = entity.getContent();
				result[1] = toString(instream);
				instream.close();
				Log.d("post", "Result from post JsonPost : " + result[0]
						+ " : " + result[1]);
			}

		} catch (Exception e) {
			Log.e("NGVL", "Falha ao acessar Web service", e);
			result[0] = "0";
			result[1] = "Falha de rede!";
		}
		return result;
	}

	private String toString(InputStream is) throws IOException {

		byte[] bytes = new byte[1024];
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int lidos;
		while ((lidos = is.read(bytes)) > 0) {
			baos.write(bytes, 0, lidos);
		}
		return new String(baos.toByteArray());
	}
}

Eu até tentei fuçar no AsyncTask, mas em cada exemplo que eu acho a pessoa faz de um jeito. Ou eles criam uma nova classe ou fazem direto no main e isso esta me deixando muito confuso, não sei como devo trabalhar.
Sem dizer que eu também não entendi como faço para chamar o método que me retorna o ArrayList (getListaGrupoProduto) e passar isso para a Intent.
Alguém poderia me dar uma ajuda???

Agradeço desde já pela a atenção!
:D

11 Respostas

Z

Galera,

Resolvi meu problema, fiz da seguinte forma

private void retornarTodos() { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try { GrupoProdutoRest gProdRest = new GrupoProdutoRest(); ArrayList<GrupoProduto> listaGrupoProduto = (ArrayList<GrupoProduto>) gProdRest.getListaGrupoProduto(); Intent i = new Intent(getApplicationContext(), ListaGrupoProduto.class); i.putExtra("lista", listaGrupoProduto); startActivity(i); } catch (Exception e) { e.printStackTrace(); gerarToast(e.getMessage()); } return null; } }.execute(); }

E depois no botão eu chamei esse método.
8)

A
Zenity:
Galera,

Resolvi meu problema, fiz da seguinte forma

private void retornarTodos() {
		new AsyncTask<Void, Void, Void>() {
			@Override
			protected Void doInBackground(Void... params) {
				try {
					GrupoProdutoRest gProdRest = new GrupoProdutoRest();
					ArrayList<GrupoProduto> listaGrupoProduto = (ArrayList<GrupoProduto>) gProdRest.getListaGrupoProduto();
					Intent i = new Intent(getApplicationContext(), ListaGrupoProduto.class);
					i.putExtra("lista", listaGrupoProduto);
					startActivity(i);
				} catch (Exception e) {
					e.printStackTrace();
					gerarToast(e.getMessage());
				}
				return null;
			}
		}.execute();
	}

E depois no botão eu chamei esse método.
8)

Olá Zenity, sabe me dizer como implemento este método que vc fez no meu projeto? Sou muito inexperiente com java, e preciso de ajuda

Fiz assim
private void pesquisarClientes() {
		dialog = ProgressDialog.show(this, "Aguarde...",
				"Pesquisando registros.", false, true);
		dialog.setIcon(R.drawable.ic_launcher);
		dialog.setCancelable(false);

		DSRESTConnection conn = getConnection();
		final TServerMethods1 serv = new TServerMethods1(conn);

		new AsyncTask<Void, Void, Void>() {

			@Override
			protected Void doInBackground(Void... params) {
				try {

					String idCharCodItem = edtCliente.getText().toString();
					String[] idNumItem = idCharCodItem.split("-");

					GetDados_ClientesReturns ret;
					ret = serv.GetDados_Clientes(idNumItem[0]);

					if (ret.Nome.equals(" - ")) {
						Alerta.mostrarAtencao(VendaClienteActivity.this,
								getString(R.string.msg_clientenaolocalizado),
								0, false);
						carregando(false);
						// permanece no mesmo focus
						edtCliente.setText("");
						edtCliente.setFocusableInTouchMode(true);
						edtCliente.requestFocus();

					} else {
						// parametro = 0 significa 'Não', 1 significa 'Sim'
						if (parametroBLOQUEIA_CLIENTE_S_REG_ENTR() == 1) {
							// ai verifica se o cliente tem registro do entrada
							if (verificaIDCliente() != Integer
									.parseInt(idNumItem[0])) {
								Alerta.mostrarAtencao(
										VendaClienteActivity.this,
										getString(R.string.msg_clientesemregentrada),
										0, false);
								carregando(false);

								// permanece no mesmo focus
								edtCliente.setText("");
								edtCliente.setFocusableInTouchMode(true);
								edtCliente.requestFocus();
							} else {
								mudaFocusCliente();
								// recebe o nome e o id do cliente
								edtCliente.setText(ret.Nome);
							}
						} else {
							mudaFocusCliente();
							// recebe o nome e o id do cliente
							edtCliente.setText(ret.Nome);
						}
					}

					finalizaDialogo(false, "");
					// desabilita o dialog
					dialog.dismiss();

				} catch (Exception e) {
					e.printStackTrace();
					dialog.dismiss();
					finalizaDialogo(true, e.getMessage());				
				}
				return null;
			}
		}.execute();

Mais está retornando este erro
"Only the original thread that created a view hierarchy can touch its views.?

Obrigado.

A
Tentei assim
public class verificarRealPorcentagem extends AsyncTask<Void, Void, Void> {

		private ProgressDialog progress;
		private Context context;

		public verificarRealPorcentagem(Context context) {
			this.context = context;
		}

		@Override
		protected void onPreExecute() {
			// Cria novo um ProgressDialogo e exibe
			progress = new ProgressDialog(context);
			progress.setMessage("Aguarde...");
			progress.show();
		}

		@Override
		protected Void doInBackground(Void... params) {
			try {

				if (parametroDESC_PORCENTAGEM() == 0) {
					txtValoresX.setText("");
					txtValoresY.setText("");
				} else if (parametroDESC_PORCENTAGEM() == 1) {
					txtValoresX
							.setText(MensagensCentralizadas.msg_emporcentagem);
					txtValoresY
							.setText(MensagensCentralizadas.msg_emporcentagem);
				} else if (parametroDESC_PORCENTAGEM() == 2) {
					txtValoresX.setText(MensagensCentralizadas.msg_emreal);
					txtValoresY.setText(MensagensCentralizadas.msg_emreal);
				}

			} catch (Exception e) {
				e.printStackTrace();

				Toast.makeText(VendaClienteActivity.this, e.getMessage(),
						Toast.LENGTH_LONG).show();
			}
			return null;			
		}

		@Override
		protected void onPostExecute(Void result) {
			// Cancela progressDialogo
			progress.dismiss();
		}	

	}
E chamando assim
verificarRealPorcentagem vRP = new verificarRealPorcentagem(this);
		vRP.execute();

Mais está dando erro

01-11 18:31:59.760: W/System.err(12871): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
01-11 18:31:59.760: W/System.err(12871): at android.view.ViewRoot.checkThread(ViewRoot.java:3020)
01-11 18:31:59.760: W/System.err(12871): at android.view.ViewRoot.invalidateChild(ViewRoot.java:647)
01-11 18:31:59.760: W/System.err(12871): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:673)
01-11 18:31:59.760: W/System.err(12871): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)
01-11 18:31:59.760: W/System.err(12871): at android.view.View.invalidate(View.java:5279)
01-11 18:31:59.760: W/System.err(12871): at android.widget.TextView.checkForRelayout(TextView.java:5618)
01-11 18:31:59.770: W/System.err(12871): at android.widget.TextView.setText(TextView.java:2779)
01-11 18:31:59.770: W/System.err(12871): at android.widget.TextView.setText(TextView.java:2640)
01-11 18:31:59.770: W/System.err(12871): at android.widget.TextView.setText(TextView.java:2615)
01-11 18:31:59.770: W/System.err(12871): at br.com.azsolucoes.azcomanda.activities.VendaClienteActivity$1.doInBackground(VendaClienteActivity.java:856)
01-11 18:31:59.770: W/System.err(12871): at br.com.azsolucoes.azcomanda.activities.VendaClienteActivity$1.doInBackground(VendaClienteActivity.java:1)
01-11 18:31:59.770: W/System.err(12871): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-11 18:31:59.770: W/System.err(12871): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-11 18:31:59.770: W/System.err(12871): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-11 18:31:59.770: W/System.err(12871): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-11 18:31:59.770: W/System.err(12871): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-11 18:31:59.770: W/System.err(12871): at java.lang.Thread.run(Thread.java:1019)
01-11 18:31:59.770: W/dalvikvm(12871): threadid=9: thread exiting with uncaught exception (group=0x40018578)
01-11 18:31:59.770: E/AndroidRuntime(12871): FATAL EXCEPTION: AsyncTask #1
01-11 18:31:59.770: E/AndroidRuntime(12871): java.lang.RuntimeException: An error occured while executing doInBackground()
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.lang.Thread.run(Thread.java:1019)
01-11 18:31:59.770: E/AndroidRuntime(12871): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.os.Handler.(Handler.java:121)
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.widget.Toast.(Toast.java:68)
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.widget.Toast.makeText(Toast.java:231)
01-11 18:31:59.770: E/AndroidRuntime(12871): at br.com.azsolucoes.azcomanda.activities.VendaClienteActivity$1.doInBackground(VendaClienteActivity.java:866)
01-11 18:31:59.770: E/AndroidRuntime(12871): at br.com.azsolucoes.azcomanda.activities.VendaClienteActivity$1.doInBackground(VendaClienteActivity.java:1)
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-11 18:31:59.770: E/AndroidRuntime(12871): ... 4 more

A

Resolvido usando desta forma

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
		this.getWindow().clearFlags(
				WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

		setContentView(R.layout.tela_vendacli);

		// versão 4.0 android
		StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
				.permitAll().build();
		StrictMode.setThreadPolicy(policy);

Obrigado

Z

Opa cara tudo bem!
Desculpa não responder antes, não tinha visto suas mensagens!!

Então, esse jeito ai que você achou eu também tinha achado quando estava implementando, mas o pessoal não recomendou desse jeito porque de certa forma você está “burlando” as restrições do Android.

A forma mais correta mesmo é usando a AsyncTask ou uma Thread que execute a operação do WS.

L

Boa noite,

Quanto a questão do erro apresentado é porque você não pode alterar componentes da thread da interface na AsyncTask, que esteja fora da sua Activity.
Em resumo, crie a sua asynctask como uma classe interna da sua Activity e chame ela no onCreate(); lembrando que em caso de requisições muito extensas, use Service.

L
adriano_servitec:
Tentei assim
public class verificarRealPorcentagem extends AsyncTask<Void, Void, Void> {

		private ProgressDialog progress;
		private Context context;

		public verificarRealPorcentagem(Context context) {
			this.context = context;
		}

		@Override
		protected void onPreExecute() {
			// Cria novo um ProgressDialogo e exibe
			progress = new ProgressDialog(context);
			progress.setMessage("Aguarde...");
			progress.show();
		}

		@Override
		protected Void doInBackground(Void... params) {
			try {

				if (parametroDESC_PORCENTAGEM() == 0) {
					txtValoresX.setText("");
					txtValoresY.setText("");
				} else if (parametroDESC_PORCENTAGEM() == 1) {
					txtValoresX
							.setText(MensagensCentralizadas.msg_emporcentagem);
					txtValoresY
							.setText(MensagensCentralizadas.msg_emporcentagem);
				} else if (parametroDESC_PORCENTAGEM() == 2) {
					txtValoresX.setText(MensagensCentralizadas.msg_emreal);
					txtValoresY.setText(MensagensCentralizadas.msg_emreal);
				}

			} catch (Exception e) {
				e.printStackTrace();

                             /*
                              //O seu erro está aqui neste bloco
				Toast.makeText(VendaClienteActivity.this, e.getMessage(),
						Toast.LENGTH_LONG).show();
                           //Fim do bloco
                         * /
			}
			return null;			
		}

		@Override
		protected void onPostExecute(Void result) {
			// Cancela progressDialogo
			progress.dismiss();
		}	

	}
E chamando assim
verificarRealPorcentagem vRP = new verificarRealPorcentagem(this);
		vRP.execute();

Mais está dando erro

01-11 18:31:59.760: W/System.err(12871): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
01-11 18:31:59.760: W/System.err(12871): at android.view.ViewRoot.checkThread(ViewRoot.java:3020)
01-11 18:31:59.760: W/System.err(12871): at android.view.ViewRoot.invalidateChild(ViewRoot.java:647)
01-11 18:31:59.760: W/System.err(12871): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:673)
01-11 18:31:59.760: W/System.err(12871): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)
01-11 18:31:59.760: W/System.err(12871): at android.view.View.invalidate(View.java:5279)
01-11 18:31:59.760: W/System.err(12871): at android.widget.TextView.checkForRelayout(TextView.java:5618)
01-11 18:31:59.770: W/System.err(12871): at android.widget.TextView.setText(TextView.java:2779)
01-11 18:31:59.770: W/System.err(12871): at android.widget.TextView.setText(TextView.java:2640)
01-11 18:31:59.770: W/System.err(12871): at android.widget.TextView.setText(TextView.java:2615)
01-11 18:31:59.770: W/System.err(12871): at br.com.azsolucoes.azcomanda.activities.VendaClienteActivity$1.doInBackground(VendaClienteActivity.java:856)
01-11 18:31:59.770: W/System.err(12871): at br.com.azsolucoes.azcomanda.activities.VendaClienteActivity$1.doInBackground(VendaClienteActivity.java:1)
01-11 18:31:59.770: W/System.err(12871): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-11 18:31:59.770: W/System.err(12871): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-11 18:31:59.770: W/System.err(12871): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-11 18:31:59.770: W/System.err(12871): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-11 18:31:59.770: W/System.err(12871): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-11 18:31:59.770: W/System.err(12871): at java.lang.Thread.run(Thread.java:1019)
01-11 18:31:59.770: W/dalvikvm(12871): threadid=9: thread exiting with uncaught exception (group=0x40018578)
01-11 18:31:59.770: E/AndroidRuntime(12871): FATAL EXCEPTION: AsyncTask #1
01-11 18:31:59.770: E/AndroidRuntime(12871): java.lang.RuntimeException: An error occured while executing doInBackground()
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.lang.Thread.run(Thread.java:1019)
01-11 18:31:59.770: E/AndroidRuntime(12871): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.os.Handler.(Handler.java:121)
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.widget.Toast.(Toast.java:68)
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.widget.Toast.makeText(Toast.java:231)
01-11 18:31:59.770: E/AndroidRuntime(12871): at br.com.azsolucoes.azcomanda.activities.VendaClienteActivity$1.doInBackground(VendaClienteActivity.java:866)
01-11 18:31:59.770: E/AndroidRuntime(12871): at br.com.azsolucoes.azcomanda.activities.VendaClienteActivity$1.doInBackground(VendaClienteActivity.java:1)
01-11 18:31:59.770: E/AndroidRuntime(12871): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-11 18:31:59.770: E/AndroidRuntime(12871): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-11 18:31:59.770: E/AndroidRuntime(12871): ... 4 more

Boa noite,

Tire o Toast do

doInBackground()

Novamente o Android não permite que se manipule elementos da Thread UI(Principal) por meio de outras Threads

Att

g4j

lucas93lange:

Novamente o Android não permite que se manipule elementos da Thread UI(Principal) por meio de outras Threads

Att

Exato. Mas você pode dizer para o programa executar o código na thread do android usando o método runOnUiThread

Um exemplo:

http://stackoverflow.com/questions/11791157/can-i-have-an-example-of-displaying-a-toast-using-runonuithread

L

g4j:
lucas93lange:

Novamente o Android não permite que se manipule elementos da Thread UI(Principal) por meio de outras Threads

Att

Exato. Mas você pode dizer para o programa executar o código na thread do android usando o método runOnUiThread

Um exemplo:

http://stackoverflow.com/questions/11791157/can-i-have-an-example-of-displaying-a-toast-using-runonuithread

Boa noite,

Muito obrigado g4j pelo complemento, inclusive eu li a respeito do metodo citado.
Mas há de concordar comigo que neste caso os componentes da interface estão esperando uma resposta de outra Thread onde há operações de rede, o mais indicado seria ele executar a comunicação no doInBackground() e com resultado obtido realizar o preenchimento dos componentes no onPostExecute.

M

Boa noite cara tudo bem?

Você conseguiu enviar os dados do seu android para o Webservice?

Estou tentando implementar aqui e não to conseguindo, tem algum exemplo?

L

Boa noite cara,
Tudo.

Qual é o seu WebService?

.Net
Java
PHP

Ele é SOAP ou RestFull?

No SOAP uma forma de mandar é converter os seus parametros para tipos primitivos ou até String e enviar.

Criado 25 de outubro de 2012
Ultima resposta 19 de ago. de 2014
Respostas 11
Participantes 5