Partage
  • Partager sur Facebook
  • Partager sur Twitter

données Firebase Realtime Database dans une liste

Sujet résolu
    8 août 2021 à 1:08:18

    Bonsoir,

    Je suis en train de développer un application android en java avec android studio. Le but est de faire un control parental. J'ai donc connecté mon application au service Firebase pour avoir accès au Realtime Database.

    Contexte : lorsque le parent veut voir les apps installées sur le téléphone de l'enfant, l'app installée sur le téléphone de l'enfant va envoyer le nom de toutes les applications dans le téléphone vers Realtime Database. Ensuite, le téléphone parent pourras voir les apps installées sur le téléphone enfant.

    Depuis le téléphone parent, pour récupérer les titres des apps sur Realtime database, j'utilise la fonction getAllApps qui retourne une liste de type AppItem. AppItem est une class qui demande un nom et un package dans son constructeur.

    Le problème, c'est que cette fonction retourne la variable results mais je pense qu'elle est vide, car rien ne s'affiche. Pourtant, j'ai fait une vérification et tous les noms d'apps sont bien détectés.

    private List<AppItem> getAllApps() {
            String uid = mAuth.getUid();
    
            List<AppItem> results = new ArrayList<>(); // création d'une liste 
    
    
            DatabaseReference ref5 = FirebaseDatabase.getInstance().getReference().child(uid).child("apps").child("name");
            ref5.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
    
                    if(snapshot.exists()){
    
                        for (DataSnapshot dss : snapshot.getChildren()){
                            String app_name = dss.getValue(String.class);
                            Log.d("name_app", name_app); // pas d'erreur tous les noms d'apps s'affiche en console
                            results.add(new AppItem(app_name, "package");
                        }
                        Toast.makeText(ShowApps.this, "end", Toast.LENGTH_SHORT).show();
                        // pas d'erreur
    
                    } else {
                        Log.d("name_app", "erreur");
                    }
                }
    
                @Override
                public void onCancelled(@NonNull DatabaseError error) {
    
                }
            });
            return results;
        }

    Ce que je ne comprends pas, c'est pourquoi la partie enregistrement des variables dans la liste ne fonctionne pas alors que si je fait un test avec les noms d'app du téléphone parent, aucun problème.

    private List<AppItem> getAllApps() {
            
            List<AppItem> results = new ArrayList<>();
            PackageManager packageManager = getPackageManager();
    
            Intent intent = new Intent(Intent.ACTION_MAIN, null);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
    
            List<ResolveInfo> resolveInfosList = getPackageManager().queryIntentActivities(intent, 0);
    
            for (ResolveInfo resolveInfo : resolveInfosList){
                ActivityInfo activityInfo = resolveInfo.activityInfo;
                results.add(new AppItem(activityInfo.loadLabel(packageManager).toString(),"package_name"));
            }
    
            
            return results;
        }

    Avez-vous des idées ?

    Pour information, ma structure de données pour Realtime database est :

    -->uid --> apps --> name

    --> 1 : Chrome

    --> 2 : Contacts

    --> 3 : .............

    merci de votre compréhension

    -
    Edité par QuentinGauny 8 août 2021 à 1:10:38

    • Partager sur Facebook
    • Partager sur Twitter

    données Firebase Realtime Database dans une liste

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown