how to show a ProgressBar or a ProgressDialog while I'm doing a query with retrofit

0

I am working on a app which uses a Api to query a web server through retrofit . In my project I use the pattern MVC , and what I'm looking for is to enter a ProgressBar or a ProgressDialog q show up when I wait for the answer of my response while doing the validation of existence of a user. I would like to know how I could introduce any of the Progress to my project.

AddUser

public class AgregarUsuario extends AppCompatActivity  {

    public EditText nombre;
    LinearLayout agregar;
    Context context;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_agregar_usuario);
        nombre = (EditText) findViewById(R.id.nombreUsuario);
        agregar = (LinearLayout) findViewById(R.id.btnAgregarUsuario);
        context = AgregarUsuario.this;

        agregar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
                ControladorUsuario controlador = new ControladorUsuario(context);
                if (nombre.getText().toString().length() > 0) {
                    String nom = nombre.getText().toString();
                    Usuario u = new Usuario();
                    u.setNombre(nom);
                    boolean existe = controlador.validarUsuario(u);
                    if (existe == false) {
                        controlador.crearUsuario(u);
                        finish();
                        }
                }
            }
        });
    }
}

UserController

public class ControladorUsuario {

    private Context context;
    public ArrayList<String> listaEspecialidades;
    public ArrayList<Especialidad> EspecialidadesList;


    public ControladorUsuario(Context c) {
        this.context = c;

    }

    public boolean validarUsuario(Usuario usuario) {
        Controlador_Api_Usuario c = new Controlador_Api_Usuario();
        String nombre = usuario.getNombre();
        List<Usuario> e = c.getUsuario(nombre);

        if (e.size() == 0) {
            return false;
        } else {
            return true;
        }
    }

    public void crearUsuario(Usuario usuario) {
        Controlador_Api_Usuario c = new Controlador_Api_Usuario();
        c.crearUsuario(usuario);
    }
}

Driver_Api_User

public class Controlador_Api_Usuario {

    public static final String base_url = "http://misiatio.com/api/";
    public Retrofit retrofit;


    public Controlador_Api_Usuario() {

    }

    public void conectar() {
        retrofit = new Retrofit.Builder()
                .baseUrl(base_url)
                .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().create()))
                .build();
    }


    public List<Usuario> getUsuario(String nombre) {
        conectar();
        List<Usuario> usuario = null;
        UsuarioService eService = retrofit.create(UsuarioService.class);
        Call<List<Usuario>> call = eService.validarUsuario(nombre);
        try {
            Response<List<Usuario>> response = call.execute();
            if (response.isSuccessful()) {
                usuario = response.body();
            }
        } catch (IOException e) {
            e.getMessage();
        }
        return usuario;
    }

    public void crearUsuario(final Usuario usuario) {
        conectar();
        UsuarioService service = retrofit.create(UsuarioService.class);
        Call<Usuario> call = service.agregarUsuario(usuario);
        call.enqueue(new Callback<Usuario>() {

            @Override
            public void onResponse(Call<Usuario> call, retrofit2.Response<Usuario> response) {

            }

            @Override
            public void onFailure(Call<Usuario> call, Throwable t) {

            }
        });
    }

}

UserService

public interface UsuarioService {
    @GET("usuario/getAll")
    Call<ArrayList<Usuario>> getUsuarios();

    @GET("usuario/validar/{nombre}")
    Call<List<Usuario>> validarUsuario(@Path("nombre") String nombre);

    @POST("usuario/agregar")
    Call<Usuario>agregarUsuario(@Body Usuario usuario);

}
    
asked by Germanccho 09.05.2018 в 01:33
source

2 answers

1

In your method crearUsuario of the class Controlador_Api_Usuario is where you make the request with retrofit to create your user. What you can do is send the callback as a parameter from your activity to handle when the response arrives and show and / or hide a progressbar or dialog to your liking.

If you use a progressbar, previously add the progress where you want it to appear in your layout and make the necessary reference. If you use the dialog, you must create a variable in your activity to be able to perform the dismiss when you finish.

private ProgressDialog mDialog; //inicializalo con el mensaje que necesites

.......

if (existe == false) {
    //mDialog.show();
    mProgressbar.setVisibility(View.VISIBLE);

    controlador.crearUsuario(u, new Callback<Usuario>() {

        @Override
        public void onResponse(Call<Usuario> call, retrofit2.Response<Usuario> response) {
              //validar que la respuesta llego correctamente
              mProgressbar.setVisibility(View.GONE);
              //mDialog.dismiss();
              //agregar un mensaje al usuario que todo salio bien
        }

        @Override
        public void onFailure(Call<Usuario> call, Throwable t) {
              mProgressbar.setVisibility(View.GONE);
              //mDialog.dismiss();
              //agregar un mensaje al usuario que algo salio mal
        }
    });
}

In your class ControladorUsuario

public void crearUsuario(Usuario usuario, Callback callback) {
    Controlador_Api_Usuario c = new Controlador_Api_Usuario();
    c.crearUsuario(usuario, callback);
}

In your class Controlador API

public void crearUsuario(final Usuario usuario, Callback callback){
    .....
    call.enqueue(callback);
    
answered by 09.05.2018 / 17:16
source
0

XML

<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

Activity

public class AgregarUsuario extends AppCompatActivity  {

public EditText nombre;
LinearLayout agregar;
Context context;
private ProgressBar progressBar;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_agregar_usuario);
    nombre = (EditText) findViewById(R.id.nombreUsuario);
    agregar = (LinearLayout) findViewById(R.id.btnAgregarUsuario);
    progressBar = findViewById(R.id.progressBar);
    context = AgregarUsuario.this;

    agregar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
            ControladorUsuario controlador = new ControladorUsuario(context, onUserValidatedCallback);
            if (nombre.getText().toString().length() > 0) {
                String nom = nombre.getText().toString();
                Usuario u = new Usuario();
                u.setNombre(nom);
                controlador.validarUsuario(u);
                progressBar.setVisibility(View.VISIBLE);
            }
         }
      });
   }


  private  OnUserValidatedCallback  onUserValidatedCallback = new OnUserValidatedCallback() {
    @Override
    public void onSuccess() {
        controlador.crearUsuario(u);
        finish();
        progressBar.setVisibility(View.GONE);
    }

    @Override
    public void onError() {

    }
  };

    interface OnUserValidatedCallback {
        void onSuccess();
        void onError();
    }
}

Controller

 public class ControladorUsuario {

private Context context;
public ArrayList<String> listaEspecialidades;
public ArrayList<Especialidad> EspecialidadesList;
private OnUserValidatedCallback onUserValidatedCallback;



public ControladorUsuario(Context c, OnUserValidatedCallback onUserValidatedCallback) {
    this.context = c;
    this.onUserValidatedCallback = onUserValidatedCallback;
}

public boolean validarUsuario(Usuario usuario) {
    Controlador_Api_Usuario c = new Controlador_Api_Usuario(onUserValidatedCallback);
    String nombre = usuario.getNombre();
    List<Usuario> e = c.getUsuario(nombre);

    if (e.size() == 0) {
        return false;
    } else {
        return true;
    }
}

public void crearUsuario(Usuario usuario) {
    Controlador_Api_Usuario c = new Controlador_Api_Usuario();
    c.crearUsuario(usuario);
 }
}

API Driver

public class Controlador_Api_Usuario {

public static final String base_url = "http://misiatio.com/api/";
public Retrofit retrofit;
private OnUserValidatedCallback onUserValidatedCallback;


public Controlador_Api_Usuario(OnUserValidatedCallback onUserValidatedCallback) {
     this.onUserValidatedCallback = onUserValidatedCallback;
}

public void conectar() {
    retrofit = new Retrofit.Builder()
            .baseUrl(base_url)
            .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().create()))
            .build();
}


public List<Usuario> getUsuario(String nombre) {
    conectar();
    List<Usuario> usuario = null;
    UsuarioService eService = retrofit.create(UsuarioService.class);
    Call<List<Usuario>> call = eService.validarUsuario(nombre);
    try {
        Response<List<Usuario>> response = call.execute();
        if (response.isSuccessful()) {
            onUserValidatedCallback.onSuccess();
            usuario = response.body();
        }
    } catch (IOException e) {
        e.getMessage();
    }
    return usuario;
}

public void crearUsuario(final Usuario usuario) {
    conectar();
    UsuarioService service = retrofit.create(UsuarioService.class);
    Call<Usuario> call = service.agregarUsuario(usuario);
    call.enqueue(new Callback<Usuario>() {

        @Override
        public void onResponse(Call<Usuario> call, retrofit2.Response<Usuario> response) {

        }

        @Override
        public void onFailure(Call<Usuario> call, Throwable t) {

        }
    });
}

}

You can also implement it to receive a response when creating a user.

Greetings.

    
answered by 09.05.2018 в 16:53