>
Boa tarde !!!
Estou tentando consumir um webservice que crie para fazer um teste.. mais esta dando erro quando executa o metodo transport.call..
Segue a minha class para vocês olhar:
Por favor preciso de ajuda para entender.. Este webservice retorna uma lista de registros... onde posteriormente vou inserir em uma base local e exibir em um listView
package br.com.whatscola;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
private String NAMESPACE = "http://tempuri.org/ ";
private String URL = "http://mcola.somee.com/ServicePrincipal.asmx";
private String METHOD_NAME = "ConsultaMSG";
private String SOAP_ACTION = "http://mcola.somee.com/ServicePrincipal.asmx?op=ConsultaMSG";
private SoapObject soap;
private SoapSerializationEnvelope envelope;
private ProgressDialog progress;
private SoapObject resposta;
private AndroidHttpTransport transporte;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SQLiteDatabase db = openOrCreateDatabase("whatscola.db",
Context.MODE_PRIVATE, null);
StringBuilder query = new StringBuilder();
query.append("CREATE TABLE IF NOT EXISTS msgcontrol(");
query.append(" ID INTEGER PRIMARY KEY, ");
query.append(" MSG VARCHAR(200));");
db.execSQL(query.toString());
db.close();
}
public void Verificar_Click(View v) {
soap = new SoapObject(NAMESPACE, METHOD_NAME);
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(soap);
transporte = new AndroidHttpTransport(URL);
try {
transporte.call(SOAP_ACTION, envelope);
Toast.makeText(MainActivity.this, "Passou Pelo Call",
Toast.LENGTH_LONG).show();
resposta = (SoapObject) envelope.getResponse();
Toast.makeText(MainActivity.this, "Passou Pelo Soap",
Toast.LENGTH_LONG).show();
resposta = (SoapObject) resposta.getProperty(1);
SoapObject table = (SoapObject) resposta.getProperty(0);
int count = table.getPropertyCount();
String lc = Integer.toString(count);
for (int i = 0; i < count; i++) {
SoapObject tableRow = (SoapObject) table.getProperty(i);
String id = tableRow.getProperty("ID").toString();
Toast.makeText(MainActivity.this, id, Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Log.d("Erro", e.toString());
Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_LONG)
.show();
}
}
}
Alguém pode me ajudar?
Ola Murilo..
Dê o logcat p a gente analisar?
Bom dia Andre!!!
Tudo Bem?
Segue o log
04-14 13:12:41.791: D/Erro(645): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG @2:7 in java.io.InputStreamReader@4104c448)
Este é erro que esta dando...
Muito obrigado
Murilo,
dê uma olhada nesse site aki
http://stackoverflow.com/questions/20778846/org-xmlpull-v1-xmlpullparserexception-expected-start-tag-error-when-using-ksoap2
Boa tarde !!!
Ainda continua o erro... e pelo que eu vi.. o erro esta na linha transporte.call(SOAP_ACTION, envelope);.
Se quiser posso disponibilizar o WebServer para vc testar..
http://mcola.somee.com/ServicePrincipal.asmx
Ok...
Obrigado
Bom dia Continuo testando, mais mesmo assim o erro persiste, mudei minha class.
package br.com.whatscola;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
private static final String NAMESPACE = "http://tempuri.org/";
private static final String METHOD_NAME = "ConsultaMSG";
private static final String SOAP_ACTION = "http://tempuri.org/ConsultaMSG";
private static final String URL = "http://192.168.10.125/mcola/ServicePrincipal.asmx";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void Verificar_Click(View v) {
try {
SoapObject requisicao = new SoapObject(NAMESPACE, METHOD_NAME); // Cria um SoapObject passando os parâmetros;
/* requisicao.addProperty("n1", 2); // Adiciona o valor do primeiro parâmetro do web service;
requisicao.addProperty("n2", 4); // Adiciona o valor do segundo parâmetro do web service;
*/
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11); // Cria o envelope;
envelope.dotNet = true; // Especifica que o web service utilizado é um .NET;
envelope.setOutputSoapObject(requisicao); // Envia a requisição ao web service;
HttpTransportSE http = new HttpTransportSE(URL); // Cria a comunicação com o local do web service;
Log.d("Erro", "Depois do URL");
http.call(SOAP_ACTION, envelope); // Chama o web service passando o nome do NAMESPACE da aplicação ASP.NET mais o nome do metódo e o envelope;
Log.d("Erro", "Depois do call");
SoapPrimitive s = (SoapPrimitive) envelope.getResponse(); // Transformo a resposta em um SoapPrimitive;
String msg = s.toString(); // Converto a resposta em uma String;
Log.d("Resultado", msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Mais agora ele da um erro mais completo...
04-15 13:47:31.610: D/Erro(641): Depois do URL
04-15 13:47:32.041: W/System.err(641): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG @2:7 in java.io.InputStreamReader@4104a318)
04-15 13:47:32.041: W/System.err(641): at org.kxml2.io.KXmlParser.require(KXmlParser.java:2046)
04-15 13:47:32.050: W/System.err(641): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:127)
04-15 13:47:32.060: W/System.err(641): at org.ksoap2.transport.Transport.parseResponse(Transport.java:63)
04-15 13:47:32.060: W/System.err(641): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:100)
04-15 13:47:32.060: W/System.err(641): at br.com.whatscola.MainActivity.Verificar_Click(MainActivity.java:43)
04-15 13:47:32.070: W/System.err(641): at java.lang.reflect.Method.invokeNative(Native Method)
04-15 13:47:32.070: W/System.err(641): at java.lang.reflect.Method.invoke(Method.java:511)
04-15 13:47:32.080: W/System.err(641): at android.view.View$1.onClick(View.java:3039)
04-15 13:47:32.080: W/System.err(641): at android.view.View.performClick(View.java:3511)
04-15 13:47:32.090: W/System.err(641): at android.view.View$PerformClick.run(View.java:14105)
04-15 13:47:32.090: W/System.err(641): at android.os.Handler.handleCallback(Handler.java:605)
04-15 13:47:32.101: W/System.err(641): at android.os.Handler.dispatchMessage(Handler.java:92)
04-15 13:47:32.101: W/System.err(641): at android.os.Looper.loop(Looper.java:137)
04-15 13:47:32.101: W/System.err(641): at android.app.ActivityThread.main(ActivityThread.java:4424)
04-15 13:47:32.111: W/System.err(641): at java.lang.reflect.Method.invokeNative(Native Method)
04-15 13:47:32.111: W/System.err(641): at java.lang.reflect.Method.invoke(Method.java:511)
04-15 13:47:32.121: W/System.err(641): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-15 13:47:32.130: W/System.err(641): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-15 13:47:32.130: W/System.err(641): at dalvik.system.NativeStart.main(Native Method)
Bom dia Pessoal!!!
Alguma novidade, não consigo fazer funcionar esta integração.
Obrigado
Att.
Murilo Ricieri Cola
Ola Murilo
desculpa eu ainda naum testei sua aplicacao pq estou sem tempo...
mas veja esse site aqui
http://portalandroid.org/comunidade/viewtopic.php?f=7&t=10520
Boa noite Andre!!!
Tudo bem !!!
Fiz um teste novamente, modificando a class e executando direto no meu celular, deu certo..
Tiver que usar o tipo SoapPrimitive..
Segue a class, agora tenho que montar método para ler a String em formato de XML
package br.com.sysmobile;
import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
public class ListarMsgActivity extends Activity implements Runnable {
private SoapObject soap;
private String namespace = "http://tempuri.org/";
private String METHOD_NAME = "ConsultaMSG";
private SoapSerializationEnvelope envelope;
// private AndroidHttpTransport transporte;
private HttpTransportSE transporte;
private String URL = "http://mcola.somee.com/ServicePrincipal.asmx";
private String SOAP_ACTION = "http://tempuri.org/ConsultaMSG";
///private String SOAP_ACTION = "http://mcola.somee.com/ServicePrincipal.asmx?op=ConsultaMSG";
private ProgressDialog pgd;
private SoapPrimitive resultado;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listar_msg);
}
public void Verificar_Click(View v) {
soap = new SoapObject(namespace, METHOD_NAME);
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(soap);
transporte = new HttpTransportSE(URL);
pgd = ProgressDialog.show(ListarMsgActivity.this, "Carregando",
"Aguardde!!!", true);
Thread th = new Thread(ListarMsgActivity.this);
th.start();
}
@Override
public void run() {
try {
Log.d("Endereço: antes do call", "Erro antes docall");
transporte.call(SOAP_ACTION, envelope);
Log.d("Erro", "Passou pelo CALL");
resultado = (SoapPrimitive)envelope.getResponse();
Log.d("Erro", "Passou pelo Resultado");
h1.sendEmptyMessage(0);
} catch (IOException e) {
Log.d("Erro ex: ", e.toString());
e.printStackTrace();
} catch (XmlPullParserException e) {
Log.d("Erro xml: ", e.toString());
e.printStackTrace();
}
}
public Handler h1 = new Handler(){
public void handleMessage(Message msg){
if(msg.what == 0){
pgd.dismiss();
String ret = resultado.toString();
Log.d("Resultado: ", ret);
}
}
};
}
Boa tarde !!!
Consegui recuperar os dados usando SOAPObject porem preciso agora ler estes dados e esta dando erro quando faço um for...
Segue a class e logcat
package br.com.sysmobile;
import java.io.IOException;
import java.util.Vector;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
public class ListarMsgActivity extends Activity implements Runnable {
private SoapObject soap;
private String namespace = "http://tempuri.org/";
private String METHOD_NAME = "ConsultaMSG";
private SoapSerializationEnvelope envelope;
// private AndroidHttpTransport transporte;
private HttpTransportSE transporte;
private String URL = "http://mcola.somee.com/ServicePrincipal.asmx";
private String SOAP_ACTION = "http://tempuri.org/ConsultaMSG";
private ProgressDialog pgd;
private SoapObject resultado;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listar_msg);
}
public void Verificar_Click(View v) {
soap = new SoapObject(namespace, METHOD_NAME);
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(soap);
transporte = new HttpTransportSE(URL);
pgd = ProgressDialog.show(ListarMsgActivity.this, "Carregando",
"Aguardde!!!", true);
Thread th = new Thread(ListarMsgActivity.this);
th.start();
}
@Override
public void run() {
try {
Log.d("Endereço: antes do call", "Erro antes docall");
transporte.call(SOAP_ACTION, envelope);
Log.d("Erro", "Passou pelo CALL");
resultado = (SoapObject) envelope.bodyIn;
Log.d("Erro", "Passou pelo Resultado");
h1.sendEmptyMessage(0);
} catch (IOException e) {
Log.d("Erro ex: ", e.toString());
e.printStackTrace();
} catch (XmlPullParserException e) {
Log.d("Erro xml: ", e.toString());
e.printStackTrace();
}
}
public Handler h1 = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0) {
pgd.dismiss();
String ret = resultado.toString();
Log.d("Resultado: ", ret);
for (int i = 0; i < resultado.getPropertyCount(); i ) {
Log.d("Erro", "Antes do OBJ");
SoapObject obj = (SoapObject) resultado.getProperty(i);
Log.d("Erro", "Depois do OBJ");
Log.d("ID: ", obj.getProperty(0).toString());
Log.d("MSG: ", obj.getProperty(1).toString());
Log.d("DT_CAD: ", obj.getProperty(2).toString());
Log.d("DT_VIG: ", obj.getProperty(3).toString());
}
}
}
};
}
LogCat
04-18 14:01:10.978: D/Endereço: antes do call(16776): Erro antes docall
04-18 14:01:12.477: D/Erro(16776): Passou pelo CALL
04-18 14:01:12.480: D/Erro(16776): Passou pelo Resultado
04-18 14:01:12.490: D/Resultado:(16776): ConsultaMSGResponse{ConsultaMSGResult=
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.490: D/Resultado:(16776):
04-18 14:01:12.492: D/Erro(16776): Antes do OBJ
04-18 14:01:12.493: D/AndroidRuntime(16776): Shutting down VM
04-18 14:01:12.493: W/dalvikvm(16776): threadid=1: thread exiting with uncaught exception (group=0x41d06d40)
04-18 14:01:12.494: E/AndroidRuntime(16776): FATAL EXCEPTION: main
04-18 14:01:12.494: E/AndroidRuntime(16776): Process: br.com.sysmobile, PID: 16776
04-18 14:01:12.494: E/AndroidRuntime(16776): java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject
04-18 14:01:12.494: E/AndroidRuntime(16776): at br.com.sysmobile.ListarMsgActivity$1.handleMessage(ListarMsgActivity.java:93)
04-18 14:01:12.494: E/AndroidRuntime(16776): at android.os.Handler.dispatchMessage(Handler.java:102)
04-18 14:01:12.494: E/AndroidRuntime(16776): at android.os.Looper.loop(Looper.java:136)
04-18 14:01:12.494: E/AndroidRuntime(16776): at android.app.ActivityThread.main(ActivityThread.java:5102)
04-18 14:01:12.494: E/AndroidRuntime(16776): at java.lang.reflect.Method.invokeNative(Native Method)
04-18 14:01:12.494: E/AndroidRuntime(16776): at java.lang.reflect.Method.invoke(Method.java:515)
04-18 14:01:12.494: E/AndroidRuntime(16776): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
04-18 14:01:12.494: E/AndroidRuntime(16776): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
04-18 14:01:12.494: E/AndroidRuntime(16776): at dalvik.system.NativeStart.main(Native Method)
Boa tarde!!!!!
Vamos ver se consegue me ajudar a ler este retorno do webservice
Obrigado