>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



SOAP WebService


Boa noite!

Fiz o exemplo da aula e deu tudo certo, mais quando tentei criar um WEBservice e alterar os objetos, deu o seguinte erro



29 Respostas


Desculpe esqueci de mandar o código que alterei

[quote]

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Data

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
' _
_
_
_
Public Class Times
Inherits System.Web.Services.WebService
Private auxDataSet As DataSet

_
Public Function Clientes(cod As String) As String

Dim SGBD As New SGBD


auxDataSet = SGBD.sqlConsulta("SELECT * FROM public.clientes where codigo = '" cod "'")

Dim nome As String

nome = auxDataSet.Tables(0).Rows(0)("razsoc_nome")

SGBD = Nothing

Return nome 'retorna o nome do celiente

End Function




End Class


alterei as seguintes linhas no exemplo


private String namespace = "http://hidroluz.com.br/";
private String METHOD_NAME = "Clientes";
private String URL = "http://localhost:51549/Portal/Times.asmx";
private String SOAP_ACTION = "http://localhost:51549/Portal/Times.asmx/Clientes";


PropertyInfo p1 = new PropertyInfo();
p1.setName("cod");
p1.setValue(txtNome.getText().toString());
p1.setType(String.class);

envelope.dotNet = true;

transporte.call(SOAP_ACTION, envelope);
resposta = (SoapPrimitive) envelope.getResponse();
Toast.makeText(getBaseContext(),resposta.toString(), Toast.LENGTH_SHORT).show();

TextView txvNome = (TextView)findViewById(R.id.txvNome);

txvNome.setText(resposta.toString());




da o seguinte erro
localhost/127.0.0.1:51549 - Connection refused

O que estou errando?

[/quote]




Segue o SOAP 1.1 do meu webservice

SOAP 1.1

The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

POST /Portal/Times.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://hidroluz.com.br/Clientes"





string





ola celso,

olha pelo q eu sei voce nao pode colocar localhost vc deve colocar o ip da sua maquina.

pq android é uma maquina e sua cpu (ou notebook) é outra.




Oi Andre não deu certo a aplicação congelou,




Pesquisando na internet mudei as seguintes linhas


private String namespace = "http://tempuri.org/";
private String METHOD_NAME = "Clientes";
private String URL = "http:10.1.0.101:80/Portal/Times.asmx";
private String SOAP_ACTION = "http://tempuri.org/Clientes";


e o erro agora é
authority expected at index 7:http://

Alguém saberia o que é?

Abrs,




Bem vamos lá, Depois de muito pesquisar consegui realizar a comunicação e leitura dos registros através do WebService que criei em asp.net

só que quando testo no próprio celular ele da uma exceção, só que quando peço para mostrar a mensagem vem em branco uso comunicação de dados 3g no celular

alguém teria alguma ideia do que seria.

segue o código que estou usando


public class ExemploWSActivity extends Activity {

private AndroidHttpTransport transporte;
private TextView textView1;
private String namespace = "http://tempuri.org/";
private String METHOD_NAME = "Clientes";
private String URL = "http://hidroluz.com.br/Portal/Times.asmx";
private String SOAP_ACTION = "http://tempuri.org/Clientes";
private SoapObject soap;
private SoapSerializationEnvelope envelope;
private ProgressDialog progress;
private SoapObject resposta;
private Drawable drawable;
private ImageView imgView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exemplo_ws);

imgView = (ImageView) findViewById(R.id.imageView1);

Button btnOk = (Button) findViewById(R.id.button1);

final EditText txtNome = (EditText) findViewById(R.id.editText1);

btnOk.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {


TextView txvNome = (TextView)findViewById(R.id.txvNome);
TextView txvEndereco = (TextView)findViewById(R.id.txvEndereco);
TextView txvUf = (TextView)findViewById(R.id.txvUf);


try {

soap = new SoapObject(namespace, METHOD_NAME);

PropertyInfo p1 = new PropertyInfo();
p1.setName("cod");
p1.setValue(txtNome.getText().toString());
p1.setType(String.class);

soap.addProperty(p1);


envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.dotNet = true;

envelope.setOutputSoapObject(soap);

//HttpTransportSE transporte = new HttpTransportSE(URL);

transporte = new AndroidHttpTransport(URL);


transporte.call(SOAP_ACTION, envelope);

//progress = ProgressDialog.show(ExemploWSActivity.this, "Carregando", "Aguarde...", true);

resposta = (SoapObject) envelope.getResponse();

resposta= (SoapObject) resposta.getProperty(1);
SoapObject table = (SoapObject) resposta.getProperty(0);

int count = table.getPropertyCount();

String lc = Integer.toString(count);

//Log.d("TOTAL DE REG.LIDOS = ", lc);

for (int i=0;i < count; i ){

SoapObject tableRow = (SoapObject) table.getProperty(i);

String nome = tableRow.getProperty("razsoc_nome").toString();
String endereco = tableRow.getProperty("endereco").toString();
String cidade = tableRow.getProperty("cidade").toString();
String bairro = tableRow.getProperty("bairro").toString();
String cep = tableRow.getProperty("cep").toString();
String telefone = tableRow.getProperty("telefone").toString();

txvNome.setText(nome);
txvEndereco.setText(endereco);
}

} catch (Exception ex){
//txvUf.setText(ex.getMessage());
//Log.d("Erro = ", ex.getMessage());

}


Abs,




Ola Celso

vc registrou tudo??

e tambem eu vi aki q a variavel soap nao foi inicializado. tente iniciar com null. porque eu tive varios problemas quando eu entrava no try sem iniciar alguma variavel.




Inicializei a variavel mais continua não buscando os registros e não mostra mensagem nenhuma, a versão do meu telefone é a 4.0.4 eu fiz o aplicativo na 2.2 pode ser isso?






tenta ai fazer um logcat pra gente ver onde esta o erro.




threadid=1: thread exiting with uncaught exception (group=0x40dd49d8)
FATAL EXCEPTION: main






Primeiro Andre quero agradecer pela sua atenção até agora, no Emulador funciona que é uma beleza já no celular segue o log


09-24 13:09:25.922: I/Adreno200-EGLSUB(10878): : Format RGBA_8888.
09-24 13:09:25.932: D/memalloc(10878): /dev/pmem: Mapped buffer base:0x51589000 size:1105920 offset:491520 fd:56
09-24 13:09:26.172: D/memalloc(10878): /dev/pmem: Mapped buffer base:0x51853000 size:1720320 offset:1105920 fd:59
09-24 13:09:26.542: D/memalloc(10878): /dev/pmem: Mapped buffer base:0x51af7000 size:2334720 offset:1720320 fd:62
09-24 13:09:28.382: W/dalvikvm(10878): threadid=1: thread exiting with uncaught exception (group=0x40dd49d8)
09-24 13:09:28.392: E/AndroidRuntime(10878): FATAL EXCEPTION: main
09-24 13:09:28.392: E/AndroidRuntime(10878): java.lang.NullPointerException: println needs a message
09-24 13:09:28.392: E/AndroidRuntime(10878): at android.util.Log.println_native(Native Method)
09-24 13:09:28.392: E/AndroidRuntime(10878): at android.util.Log.d(Log.java:138)
09-24 13:09:28.392: E/AndroidRuntime(10878): at br.com.rlsystem.WSExemplo.ExemploWSActivity$2.onClick(ExemploWSActivity.java:124)
09-24 13:09:28.392: E/AndroidRuntime(10878): at android.view.View.performClick(View.java:3524)
09-24 13:09:28.392: E/AndroidRuntime(10878): at android.view.View$PerformClick.run(View.java:14194)
09-24 13:09:28.392: E/AndroidRuntime(10878): at android.os.Handler.handleCallback(Handler.java:605)
09-24 13:09:28.392: E/AndroidRuntime(10878): at android.os.Handler.dispatchMessage(Handler.java:92)
09-24 13:09:28.392: E/AndroidRuntime(10878): at android.os.Looper.loop(Looper.java:137)
09-24 13:09:28.392: E/AndroidRuntime(10878): at android.app.ActivityThread.main(ActivityThread.java:4476)
09-24 13:09:28.392: E/AndroidRuntime(10878): at java.lang.reflect.Method.invokeNative(Native Method)
09-24 13:09:28.392: E/AndroidRuntime(10878): at java.lang.reflect.Method.invoke(Method.java:511)
09-24 13:09:28.392: E/AndroidRuntime(10878): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816)
09-24 13:09:28.392: E/AndroidRuntime(10878): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583)
09-24 13:09:28.392: E/AndroidRuntime(10878): at dalvik.system.NativeStart.main(Native Method)




nao ha de que.. estamos aqui p ajudar.


eu ja peguei esse erro mas no meu caso foi um array de string q nao foi inicializado .. ai ele entrava no try e dava esse erro.... mas no seu caso vc esta usando o webervice .. tentar la iniciar o resposta, o envelope e.o transporte..






Não funcionou, mais colocando mensagens Toast eu reparei que o erro da quando executa esta linha



transporte.call(SOAP_ACTION, envelope);




vc adicionou a biblioteca ksoap??




adicionei e coloquei ela como primeira ser enviada para o celular

ksoap2-android-assembly-2.4-jar




funciona no emulador mas nao funciona no aparelho??




essa webservice retorna o que??




se for uma string vai ter q colocar ao inves de soapobject o soapprimitive




Isso mesmo emulador OK celular não

Código retornado do webservice

[XML]































2
4135

CONDOMÍNIO DO ED. BANDEIRANTE CAPITÃO DOMINGOS RODRIGUES

BANDEIRANTE CAPITÃO DOMINGOS RODRIGUES
1
R DOMINGOS FREIRE, 44
TODOS OS SANTOS
RIO DE JANEIRO
RJ
20735220
SRA. MARIA AUXILIADORA
2289-6850 / 9744-7663
73455917000154




[/XML]




Gente joguei a toalha agora esta dando unfortunately has stopped

Vou dar um tempo depois tento de novo






naum desista, se esta dando certo no emulador vai dar certo no celular.............
qual celular vc esta testando??




Bom vamos lá

Tentei com um outro celular Nexus 4

Ai deu ruim em tudo o emulador parou o projeto deu caca, conclusão

deletei todos os projetos, criei um novo projeto fiz um novo layout, referenciei a ksoap novamente

e por ordens misteriosas da natureza byte byte, funcionou tanto no celular como no emulador, muito obrigado pela sua atenção Andre.

abraços, continuarei o projeto.

fui..........






qualquer duvida, põe aqui no site..

abraços




Andre no caso do XML retornar vazio como faço para saber, pois da uma exceção só que eu queria colocar um if antes e avisar codigo não encontrado.

tentei assim



transporte.call(SOAP_ACTION, envelope);

resposta = (SoapObject) envelope.getResponse();


int r = resposta.getPropertyCount();

if (r == 0 ){
Toast.makeText(getBaseContext(),"Código não encontrado",Toast.LENGTH_LONG).show();
}




erro do log
09-24 15:35:15.896: D/Erro =(1090): length=0; index=0




Celso,

Veja o length da resposta.




Olá, estou com o mesmo problema, funciona no emulador mas não funciona no celular.. Meu aparelho é um galaxy S3 com android 4.2.2




Consegui resolver o problema acrescentando

StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

no onCreante antes de

setContentView(R.layout.principal);



Obrigado!