1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Método para sincronizar dados do Back-End

Prezados boa tarde.

Gostaria se possível de comentários sobre o Método que empreguei para sincronização de dados do Back-End para o Dispositivo Móvel, a abordagem que eu fiz leva em conta a ação do usuário que irá selecionar no menu a rotina de Sincronização, o código logo abaixo demonstra que eu não fiz uso de serviços e que estou usando as requisições assíncrona no Retrofit.

Minha intenção em procurar o grupo é obter criticas da melhor pratica nesta rotina devido a minha pouca experiencia em Android e muito menos ainda em rotinas de sincronização.

Nesta rotina observamos que estou sincronizando duas entidades, e poderia ser mais, minha abordagem foi a correta? se a melhor forma seria usando requisições síncronas em um intentservice?

A rotina esta funcionando como disse minha intenção é obter criticas e se alguém com maior experiencia puder me ajudar neste quesito agradeço.

Robson



class SincronizarActivity extends AppCompatActivity {

    private static final String TAG = "Sincronizar";

    private ProgressDialog dialog;
    private String cURL;

    private UsuarioService usuarioService;
    private AlunoService alunoService;
    private HttpLoggingInterceptor logging;
    private OkHttpClient client;
    private Retrofit retrofit ;
    private WebServiceApi apiService;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sincronizar);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        Log.i(TAG, "onCreate()");

        cURL = "http://10.10.0.25:8080/escola/" ;

        usuarioService = new UsuarioService(this);
        alunoService = new AlunoService(this);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               if (Connectivity.networkIsAvailable(SincronizarActivity.this)){
                   sincronize();
               }
            }
        });
    }

    public void sincronize(){

        logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        client = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .addInterceptor(logging)
                .build();

        retrofit = new Retrofit.Builder()
              .baseUrl(cURL)
            .addConverterFactory(GsonConverterFactory.create()).client(client)
           .build();

        apiService = retrofit.create(WebServiceApi.class);

        sincronizeUsuarios();
        sincronizeAlunos();

    }

    public void sincronizeUsuarios(){

        Call<WsUsuarioResponse> call = apiService.getUsuarios();

        dialog = new ProgressDialog(this);
        dialog.setMessage("Sincronizando usuários, Aguarde...");
        dialog.setCancelable(false);
        dialog.show();

        call.enqueue(new Callback<WsUsuarioResponse>() {
            @Override
            public void onResponse(Call<WsUsuarioResponse> call, Response<WsUsuarioResponse> response) {
                if (dialog.isShowing())
                    dialog.dismiss();

                if (response.isSuccessful()){
                    if (response.body().getRet().equals("ok")){
                        WsUsuarioResponse retorno = response.body();

                        List<WsUsuarioResponse.ResultObject> usuarios = retorno.getResultObject();

                        if( usuarios != null ){
                            for( WsUsuarioResponse.ResultObject c : usuarios ){
                                usuarioService.Sincronizar(c);
                                //Log.i(TAG, "Usuario: "+ c.getNome() + " Login: " + c.getLogin() );
                            }
                        }
                    }
                }
            }

            @Override
            public void onFailure(Call<WsUsuarioResponse> call, Throwable t) {
                if (dialog.isShowing())
                    dialog.dismiss();

                Log.d("Error", "Houve um erro: " + t.getMessage());
            }
        });

    }

    public void sincronizeAlunos(){

        Call<WsAlunoResponse> call = apiService.getAlunos();

        dialog = new ProgressDialog(this);
        dialog.setMessage("Sincronizando alunos, Aguarde...");
        dialog.setCancelable(false);
        dialog.show();

        call.enqueue(new Callback<WsAlunoResponse>() {
            @Override
            public void onResponse(Call<WsAlunoResponse> call, Response<WsAlunoResponse> response) {
                if (dialog.isShowing())
                    dialog.dismiss();

                if (response.isSuccessful()){
                    if (response.body().getRet().equals("ok")){
                        WsAlunoResponse retorno = response.body();

                        List<WsAlunoResponse.ResultObject> alunos = retorno.getResultObject();

                        if( alunos != null ){
                            for( WsAlunoResponse.ResultObject c : alunos ){
                                alunoService.Sincronizar(c);
                            }
                        }
                    }
                }
            }

            @Override
            public void onFailure(Call<WsAlunoResponse> call, Throwable t) {
                if (dialog.isShowing())
                    dialog.dismiss();

                Log.d("Error", "Houve um erro: " + t.getMessage());
            }
        });

    }

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android ou faça a sua própria pergunta.