Отображение данных из БД онлайн в текстовом виде в ящике Навигация - PullRequest
0 голосов
/ 30 марта 2020

Я очень новичок в программировании, я делаю свое собственное приложение с Java (Android Studio). Я хочу отобразить информацию из моей онлайн-базы данных.

Я помещаю информацию в свои SharedPreferences и после того, как хочу отобразить в моем текстовом представлении:

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private DrawerLayout drawer;
    private String user_name;
    private String user_mail;
    private String user_img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //On vient mettre à jour les données profile de l'user
        //Reponse du fichier getProfile.php
        Response.Listener<String> responseListener = new Response.Listener<String>(){
            @Override
            public void onResponse(String response) {
                //Si pas d'erreur
                try {
                    JSONObject jsonResponse = new JSONObject(response);
                    //On récupére la valeur de la variable Success du JSON
                    boolean success = jsonResponse.getBoolean("success");
                    if (success){
                        //On récupére le profil de l'user
                        user_name = jsonResponse.getString("name");
                        user_img = jsonResponse.getString("img");

                        //on vient l'enregistrer dans le sharedPreferencesProfile
                        sharedPreferences.save(MainActivity.this,getResources().getString(R.string.user_sharedPreferences),"name",user_name);
                        sharedPreferences.save(MainActivity.this,getResources().getString(R.string.user_sharedPreferences),"mail",user_mail);
                        sharedPreferences.save(MainActivity.this,getResources().getString(R.string.user_sharedPreferences),"img",user_img);

                    }else{
                        //On a pas réussi à récupérer son email, on le déconnecte et on vide son sharedPreferences user
                        sharedPreferences.delete(MainActivity.this,getResources().getString(R.string.user_sharedPreferences));
                        //et on se dirige vers la page de login
                        Intent logoutIntent = new Intent(MainActivity.this, LoginActivity.class);
                        MainActivity.this.startActivity(logoutIntent);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        };
        setSharedPreferencesProfile(responseListener);

        //Récupération la toolbar
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //Récupération le menu de gauche
        drawer = findViewById(R.id.drawer_layout);

        //Récupération de la navigation view
        final NavigationView navigation_view = (NavigationView) findViewById(R.id.nav_view);
        navigation_view.setNavigationItemSelectedListener(this);
        //Récupération de l'header pour initialiser les text view
        View header = navigation_view.getHeaderView(0);

        //Initialisation des variables
        final TextView txt_user_name = (TextView) header.findViewById(R.id.menu_user_name);
        final TextView txt_user_mail = (TextView) header.findViewById(R.id.menu_user_mail);
        final TextView btnLogout = (TextView) findViewById(R.id.menu_logout);

        //On affiche dans le menu le nom et mail de l'utilisateur
        txt_user_name.setText(user_name);
        txt_user_mail.setText(user_mail);

        //Au clic sur l'hamburger on ouvre le menu de gauche
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,R.string.txt_menu_open, R.string.txt_menu_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        //Click sur btnLogout
        btnLogout.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                //On vide les données sauvegardées
                sharedPreferences.delete(MainActivity.this,getResources().getString(R.string.user_sharedPreferences));
                //et on se dirige vers la page de login
                Intent logoutIntent = new Intent(MainActivity.this, LoginActivity.class);
                MainActivity.this.startActivity(logoutIntent);
            }
        });

        //Condition pour ne pas retomber à chaque fois sur la page Plantes
        if (savedInstanceState == null) {
            //a l'ouverture de la page Main Activity (de suite apres le login) on vient selectionné (et donc ouvrir) la page Plantes
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new PlantsFragment()).commit();
            //on sélectionne dans le menu l'item Plantes
            navigation_view.setCheckedItem(R.id.menu_plants);
            //et on met à jour le titre du Toolbar
            getSupportActionBar().setTitle(getString(R.string.txt_plants_title));
        }
    }

    //Met à jour les SharedPreferences lors de la connexion (on vient récupérer Nom, Mail et Photo)
    public void setSharedPreferencesProfile(Response.Listener<String> responseListener){
        //On récupére le mail via le sharedPreferences
        user_mail = sharedPreferences.read(MainActivity.this,getResources().getString(R.string.user_sharedPreferences),"mail",null);

        //On récupére le fichier php via la variable dans strings.xml et on envoi la requete
        GetProfileRequest getProfileRequest = new GetProfileRequest(user_mail,responseListener,getResources().getString(R.string.php_file) + "get_profile.php");
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        queue.add(getProfileRequest);

    }
}

Я не понимаю, почему моя функция setSharedPreferencesProfile выполняется после этого кода (txt_user_name.setText (user_name) ) и txt_user_mail.setText (user_mail))

Заранее спасибо;)

Приветствия

...