>
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
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"
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";
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());
}
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
tem mais???
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):
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..
inicia com null
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]
CONDOMÍNIO DO ED. BANDEIRANTE CAPITÃO DOMINGOS RODRIGUES
[/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();
}
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!