1
I need to finish an application I’m doing on Android, in the login step I’m doing, and for that, I have two webservices to perform it, one is the Identifier and the second is the Loginsamba.
I’d like to make it clear that:
- It will only proceed to the Loginsamba, if the Identifier be correct
- The Loginsamba should be obligatorily performed only after the validation of Identifier
- If fail, will charge the error (that this is not happening.. :/)
The complete code of how he is, is here:
package com.testes.infovendas;
//Imports
import android.support.v7.app.ActionBarActivity;
import android.os.AsyncTask;
import android.os.Bundle;
//KSOAP2 -- Lib de conexão Webservice SOAP
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
//Adicionais
import com.testes.infovendas.R;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class InfoVendas extends ActionBarActivity {
//Variáveis
private final String NAMESPACE = "http://tempuri.org/";
private final String URL = "http://www.dominio.com.br/servicos/ws.asmx";
private final String SOAP_ACTION = "http://tempuri.org/ObterIdentificadorLoja";
private static final String SOAP_ACTION2 = "http://tempuri.org/LoginSamba";
private final String METHOD_NAME = "ObterIdentificadorLoja";
private final String METHOD_NAME = "LoginSamba";
private String TAG = "ASSYNC";
private static String cnpj_cpf_codclie, codloja, seguranca, identificadorloja;
Button b;
TextView tv;
EditText et1,et2,et3,et4;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//Identificando cada campo e função
et1 = (EditText) findViewById(R.id.editCodloja);
et2 = (EditText) findViewById(R.id.editCPF);
et3 = (EditText) findViewById(R.id.editUser);
et4 = (EditText) findViewById(R.id.editPass);
tv = (TextView) findViewById(R.id.login_informa);
b = (Button) findViewById(R.id.btnEnviar);
//Listener para quando clicar no botão Enviar
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Se todos os campos forem preenchidos, será retomado o login
if (et1.getText().length() != 0 && et1.getText().toString() != "" ||
et2.getText().length() != 0 && et2.getText().toString() != "" ||
et3.getText().length() != 0 && et3.getText().toString() != "" ||
et4.getText().length() != 0 && et4.getText().toString() != "") {
//Pega todas as informações escritas nos campos e adiciona em suas respectivas variáveis para uso do WS
codloja = et1.getText().toString();
cnpj_cpf_codclie = et2.getText().toString();
seguranca = "chavesecreta";
AsyncCallWS task = new AsyncCallWS();
task.execute();
}
//Se não for preenchido todos os campos, será retornado um TextView apenas informado para informar corretamente
else {
tv.setText("Por favor, insira todos os dados.");
}
}
});
}
// Classe AsyncIdentificador
private class AsyncIdentificador extends AsyncTask<String, Void, Void> {
// Retorna como null o valor do Identificador
// Mensagem ao clicar no botão Enviar
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute");
tv.setText("Estabelecendo conexão ao servidor...");
tv.setText("Estabelecendo conexão ao servidor..");
tv.setText("Estabelecendo conexão ao servidor...");
}
@Override
protected Void doInBackground(String... params) {
Log.i(TAG, "doInBackground");
getIdentificador(cnpj_cpf_codclie, codloja, seguranca);
return null;
}
// Mensagem e ação pós conclusão
@Override
protected void onPostExecute(Void result) {
Log.i(TAG, "onPostExecute");
tv.setText("Conexão estabelecida com sucesso. \nRealizando o login...");
}
@Override
protected void onProgressUpdate(Void... values) {
Log.i(TAG, "onProgressUpdate");
}
}
// Classe AsyncLogin
private class AsyncLogin extends AsyncTask<String, Void, Void> {
// Retorna como null o valor do Identificador
@Override
protected Void doInBackground(String... params) {
Log.i(TAG2, "doInBackground");
logarSambaNet(identificadorloja, nome, senha, seguranca);
return null;
}
// Mensagem e ação pós conclusão
@Override
protected void onPostExecute(Void result) {
Log.i(TAG2, "onPostExecute");
tv.setText("Login efetuado com sucesso");
}
// Mensagem ao clicar no botão Enviar
@Override
protected void onPreExecute() {
Log.i(TAG2, "onPreExecute");
tv.setText("Autenticando dados..");
tv.setText("Autenticando dados...");
tv.setText("Autenticando dados....");
}
@Override
protected void onProgressUpdate(Void... values) {
Log.i(TAG2, "onProgressUpdate");
}
}
// Classe para obter os dados do Identificador
public void getIdentificador(String cnpj_cpf_codclie, String codloja,
String seguranca) {
// Cria o request
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
piCodLoja = new PropertyInfo();
piCodLoja.setName("codloja");
piCodLoja.setValue(et1.getText().toString());
piCodLoja.setType(String.class);
request.addProperty(piCodLoja);
piCPF = new PropertyInfo();
piCPF.setName("cnpj_cpf_codclie");
piCPF.setValue(et2.getText().toString());
piCPF.setType(String.class);
request.addProperty(piCPF);
piSecret = new PropertyInfo();
piSecret.setName("seguranca");
piSecret.setValue("Secret");
piSecret.setType(String.class);
request.addProperty(piSecret);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
// Seta a saída do objeto SOAP
envelope.setOutputSoapObject(request);
// Cria a chamada do objeto HTTP
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
// Invoca o Web Service
androidHttpTransport.call(SOAP_ACTION, envelope);
// Get the response
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// Define identificadorloja como uma variável estática
identificadorloja = response.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
// Classe para logar no samba.Net
public void logarSambaNet(String identificadorloja, String nome,
String senha, String seguranca) {
// Cria o request
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME2);
piNome = new PropertyInfo();
piNome.setName("nome");
piNome.setValue(et3.getText().toString());
piNome.setType(String.class);
request.addProperty(piNome);
piSenha = new PropertyInfo();
piSenha.setName("senha");
piSenha.setValue(et4.getText().toString());
piSenha.setType(String.class);
request.addProperty(piSenha);
piIdentificador = new PropertyInfo();
piIdentificador.setName("identificadorloja");
piIdentificador.setValue(identificadorloja.toString());
piIdentificador.setType(String.class);
request.addProperty(piIdentificador);
piSecret = new PropertyInfo();
piSecret.setName("seguranca");
piSecret.setValue("Secret");
piSecret.setType(String.class);
request.addProperty(piSecret);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
// Seta a saída do objeto SOAP
envelope.setOutputSoapObject(request);
// Cria a chamada do objeto HTTP
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
// Invoca o Web Service
androidHttpTransport.call(SOAP_ACTION2, envelope);
// Get the response
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// Define identificadorloja como uma variável estática
LoginSamba = response.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
}
If possible, give me suggestions as well, I’m starting.. Thank you very much!
Renan, why don’t you put the two together
AsyncTask
(login and identifier) in one? You are already running everything in a separate Thread. So it is easier to control the flow sequentially.– Wakim
how could I accomplish this?
– Renan Serrão Nogueira
Enter the code of the two
AsyncTask's
in one, so the call is sequential, making it easier to control the flow.– Wakim
How I do this procedure @Wakim?
– Renan Serrão Nogueira