Saltar para conteúdo


Foto
- - - - -

Web Services Em Android


  • Por favor inicie sessão para responder
8 respostas a este tópico

#1 Ti_ESP

Ti_ESP

    Novato

  • Membros
  • Pip
  • 7 mensagens

Mensagem publicada 23 May 2012 - 08:21

Boas pessoal,

bom é o seguinte o que eu tenho que fazer é ligar a minha aplicação android a um web service só que o android so reconhece alguns tipos como primitivos por exemplo o tipo UUID e Double ele não consegue serializar, algum de vocês consegue-me ajudar, eu sei que o marshalling funciona mas não o sei usar muito bem. Em baixo vou deixar o código que tenho agora.
Os erros de serialização são:

W/System.err(327): java.lang.RuntimeException: Cannot serialize: 3e1c7765-7370-4295-8170-92a1d2dc542c-userId

java.lang.RuntimeException: Cannot serialize: 7573dcd3-e5eb-4847-8d6c-d7d171a932d7-WeightId
double: java.lang.RuntimeException: Cannot serialize: 85.0-UserWeight

package go.pw.exe;
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.Toast;
import java.util.Calendar;
import java.util.UUID;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class Ex1Activity extends Activity {
private static final String SOAP_ACTION="http://vitalcare.hydra.pt/IHealthRecordService/CreateWeightRecord";
private static final String METHOD_NAME = "CreateWeightRecord";
	private static final String NAMESPACE = "http://vitalcare.hydra.pt/";
	private static final String URL = "http://www.hydra.pt:8070/HealthRecordService.svc?wsdl";
  
	Calendar c;
	String userId = "3e1c7765-7370-4295-8170-92a1d2dc542c";
String data;
	UUID user;
	UUID weightId;
	Button send;
	EditText weight;
   [/background][/size][/font][/color]
[color=#282828][font=helvetica, arial, sans-serif][size=4][background=rgb(255, 255, 255)]	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			setContentView(R.layout.main);
		  
		  
			send = (Button) findViewById(R.id.button1);
		 weight = (EditText) findViewById(R.id.et_weight);
		 send.setOnClickListener(new OnClickListener(){
		  public void onClick(View v) {
		
		   double userWeight = Double.parseDouble(weight.getText().toString());
		   c = Calendar.getInstance();
		   weightId= UUID.randomUUID();
		   data = c.get(Calendar.YEAR)+ "-" + (c.get(Calendar.MONTH)+1) + "-"+c.get(Calendar.DAY_OF_MONTH)+ " " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND);
		   user = UUID.fromString(userId);
		
		   SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		
		   request.addProperty("UserId", user);
				  request.addProperty("CreationDate", data);
				  request.addProperty("WeightId", weightId);
				  request.addProperty("When", data);
				  request.addProperty("WeightInKilos", userWeight);
				
				  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
				  envelope.implicitTypes = true;
				  envelope.dotNet=true;
				  envelope.setOutputSoapObject(request);
				
				  HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
				
				  try{
				  androidHttpTransport.call(SOAP_ACTION, envelope);
				   }
				   catch (Exception e) {
						 e.printStackTrace();
						 Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
					  
								  }
		   }
		  });
		 }
	}

Editado por Ti_ESP, 23 May 2012 - 09:47.


#2 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 24 May 2012 - 09:41

Porque não convertes o UUID para String? A string ele serializa na boa...
E os doubles acho que também serializa.

#3 Ti_ESP

Ti_ESP

    Novato

  • Membros
  • Pip
  • 7 mensagens

Mensagem publicada 24 May 2012 - 10:18

Sim já experimentei e ele realmente serializa mas ele dá-me depois um erro stream reader que pode significar que está a receber informação errada do httptransport

#4 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 24 May 2012 - 11:03

Sim já experimentei e ele realmente serializa mas ele dá-me depois um erro stream reader que pode significar que está a receber informação errada do httptransport

Mas não os convertas de novo para UUID... Usa mesmo só uma string, não uses a classe UUID a não ser para o gerar...

#5 Ti_ESP

Ti_ESP

    Novato

  • Membros
  • Pip
  • 7 mensagens

Mensagem publicada 24 May 2012 - 11:05

Mas eu não os converti de novo eu gerava e depois passava como String, e dava-me esse erro

#6 Ti_ESP

Ti_ESP

    Novato

  • Membros
  • Pip
  • 7 mensagens

Mensagem publicada 24 May 2012 - 11:12

Será que poderias postar como é que farias sff
Cumps

Editado por Ti_ESP, 24 May 2012 - 11:21.


#7 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 24 May 2012 - 11:42

Mas eu não os converti de novo eu gerava e depois passava como String, e dava-me esse erro

Hummmm.... podes mostrar o stacktrace completo?

Será que poderias postar como é que farias sff
Cumps

Boa pergunta ;) Não sei porque nunca usei SOAP. Estou-me a guiar pelo código que mostraste...

#8 Ti_ESP

Ti_ESP

    Novato

  • Membros
  • Pip
  • 7 mensagens

Mensagem publicada 28 May 2012 - 15:49

Desculpa pela pergunta mas como é que visualizo os stacktrace? é que ainda sou novato nisto.

#9 Driver

Driver

    Membro

  • Membros
  • PipPip
  • 51 mensagens

Mensagem publicada 12 June 2012 - 01:48

StackTrace é algo parecido com o que está a vermelho nesta imagem :Imagem colocada
Stack Trace serve para ver a cadeia de chamadas até onde a Excepção não-tratada foi lançada, e detalhes sobre a Excepção

Editado por Driver, 12 June 2012 - 01:49.