Bom dia,
Estou trabalhando em um sistema que um cliente android envia dados para um webservice,
São enviados dados de 3 tabelas, em duas delas os dados são enviados sem problemas,
na terceira os dados são enviados corretamente, mas uma exception é retornada:
08-08 09:05:44.848: W/System.err(724): java.lang.NullPointerException
08-08 09:05:44.858: W/System.err(724): at org.ksoap2.transport.ServiceConnectionSE.getResponseProperties(ServiceConnectionSE.java:85)
08-08 09:05:44.858: W/System.err(724): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:167)
08-08 09:05:44.858: W/System.err(724): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96)
08-08 09:05:44.858: W/System.err(724): at br.com.comboio.ws.RequisicaoWS.inserir(RequisicaoWS.java:47)
08-08 09:05:44.866: W/System.err(724): at br.com.comboio.SincronizacaoActivity$2$1.run(SincronizacaoActivity.java:145)
08-08 09:05:44.866: W/System.err(724): java.lang.RuntimeException: ERRO: null
08-08 09:05:44.876: W/System.err(724): at br.com.comboio.ws.RequisicaoWS.inserir(RequisicaoWS.java:56)
08-08 09:05:44.966: W/System.err(724): at br.com.comboio.SincronizacaoActivity$2$1.run(SincronizacaoActivity.java:145)
O maior problema é que as vezes a solicitação completa é enviada com sucesso e as vezes essa exception aparece.
Quando ela aparece apesar dos dados terem sido enviados corretamente o código para de ser executado, e o campo que verifica se o dado já foi enviado para o servidor fica null,
quando o usuário o envia novamente os dados da tabela ficam duplicados…
Meu método de para chamar a sincronização na activiy:
//Botão para enviar as informações para o servidor.
Button btnDescarregar = (Button) findViewById(R.id.btnDescarregar);
btnDescarregar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pdAguarde = ProgressDialog.show(SincronizacaoActivity.this, "SINCRONIZAÇÃO", "ENVIANDO DADOS. AGUARDE...");
try {
new Thread(){
public void run() {
//if(Util.verificaConexaoWIFI(SincronizacaoActivity.this)){
try {
codigo_empresa = confDao.getEmpresa();
ControleCombustivelWS controleWS = new ControleCombustivelWS();
AbastecimentoVeiculoWS abastecimentoWS = new AbastecimentoVeiculoWS();
RequisicaoWS requisicaoWS = new RequisicaoWS();
Timestamp envio = new Timestamp(new Date(System.currentTimeMillis()).getTime());
ControleCombustivelDAO controleDAO = new ControleCombustivelDAO(SincronizacaoActivity.this);
ControleCombustivelWS.inserir(controleDAO.listaControles(), codigo_empresa);
controleDAO.atualizaEnvioServidor(envio);
ControleCombustivel controleCombustivel = new ControleCombustivel();
controleDAO.excluir(controleCombustivel);
AbastecimentoVeiculoDAO abastecimentoDAO = new AbastecimentoVeiculoDAO(SincronizacaoActivity.this);
AbastecimentoVeiculoWS.inserir(abastecimentoDAO.listaAbastecimentos(codigo_empresa), codigo_empresa);
abastecimentoDAO.atualizaEnvioServidor(envio);
AbastecimentoVeiculo abastecimentoVeiculo = new AbastecimentoVeiculo();
abastecimentoDAO.excluir(abastecimentoVeiculo);
RequisicaoDAO requisicaoDAO = new RequisicaoDAO(SincronizacaoActivity.this);
//O problema ocorre aqui
RequisicaoWS.inserir(requisicaoDAO.listaRequisicoes(codigo_empresa), codigo_empresa);
requisicaoDAO.atualizaControleEnvioServidor(envio);
Requisicao requisicao = new Requisicao();
requisicaoDAO.excluir(requisicao);
enviaMessageDialogThread("COMBOIO", "INFORMAÇÕES ENVIADAS COM SUCESSO");
} catch (Exception e) {
enviaMessageDialogThread("ERRO","HOUVE UM ERRO NA SINCRONIZAÇÃO. \n DETALHES: " + e.getMessage());
}
//}else{
// enviaMessageDialogThread("COMBOIO", "NÃO FOI POSSIVEL CONECTAR A REDE");
//}
pdAguarde.dismiss();
}
}.start();
} catch (Exception e) {
enviaMessageDialogThread("ERRO","HOUVE ERRO NA SINCRONIZAÇÃO. \n DETALHES: " + e.getMessage());
}
}
});
e minha classe de envio de dados
public class RequisicaoWS {
public static String inserir(List<Requisicao> requisicoes, int codigo_empresa) {
String URL;
if (codigo_empresa == 1) {
URL = "http://endereco servidor1/axis2/services/RequisicaoWS?wsdl";
}else{
URL = "http://endereco servidor2/axis2/services/RequisicaoWS?wsdl";
}
String OPERATION="inserir";
String NAMESPACE="http://ws.webservicecomboio";
String SOAP_ACTION="inserir";
try {
Util.verificaVersaoSDK();
XStream xStream = new XStream(new DomDriver());
xStream.setMode(XStream.NO_REFERENCES);
xStream.processAnnotations(Requisicao.class);
String requisicao = xStream.toXML(requisicoes);
SoapObject request = new SoapObject(NAMESPACE, OPERATION);
request.addProperty("requisicaoXML", requisicao);
request.addProperty("codigo_empresa", codigo_empresa);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
try {
HttpTransportSE httpTransport = new HttpTransportSE(URL);
httpTransport.call(SOAP_ACTION, envelope);
synchronized (httpTransport) {
httpTransport.wait(120000);
}
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
System.out.println("result::::::::::::::::::::::::" + result);
return result.toString();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("ERRO: " + e.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("ERRO: " + e.getClass().getName() + ": " + e.getMessage());
}
}
}
Queria saber se tem como tratar a exceção usando a linha do erro:
at org.ksoap2.transport.ServiceConnectionSE.getResponseProperties(ServiceConnectionSE.java:85)