[JAVA] Créons rapidement une application qui utilise Firestore! !!

Motivation pour la création de l'application

J'ai décidé de créer une application pour smartphone en peu de temps. J'étais intéressé par Firestore, donc je voulais l'utiliser. Je voulais faire quelque chose de monotone mais qui pourrait être utile. J'ai pensé faire une sortie et en faire ma propre connaissance.

Vue d'ensemble de l'application créée

Vous pouvez enregistrer des recettes de cuisine. Tous les propriétaires de l'application peuvent voir les recettes des plats enregistrés jusqu'à présent.

Présentation de Firebase

Console Firebase Créez un projet ici et suivez les instructions pour l'installer.

Au sein du projet

  1. Placez google_service.json directement sous l'application

  2. Ajoutez le code suivant

app/build.gradle


dependencies {
    ...
    //Firebase
    implementation 'com.google.firebase:firebase-analytics:17.0.1'
    implementation 'com.google.firebase:firebase-firestore:20.1.0'
    ...
}
apply plugin: 'com.google.gms.google-services'

build.gradle


buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        ...
        classpath 'com.google.gms:google-services:4.2.0'
    }
}

La configuration est maintenant terminée.

Processus d'enregistrement des données dans Firestore

RecipeInfo.java


    private String fireStoreCollectionPath = "recipes";
    private FirebaseFirestore fireStore = FirebaseFirestore.getInstance();

    private OnSuccessListener successListener = new OnSuccessListener<DocumentReference>() {
        @Override
        public void onSuccess(DocumentReference documentReference) {
            Log.d("success", "L'enregistrement fut un succès");
        }
    };
    private OnFailureListener onFailureListener = new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.d("fail", "Inscription échouée");
        }
    };

    /**
    *Processus d'enregistrement des recettes dans Firestore
    * @param map Informations sur la recette enregistrées dans Firestore
    */
    public void recipeAdd(Map map) {
        //Génération de collection Firestore.
        fireStore.collection(fireStoreCollectionPath)
                .add(map)
                .addOnSuccessListener(successListener)
                .addOnFailureListener(onFailureListener);
    }

RecipeAddActivity.java


    private Map<String, String> recipe = new HashMap<>();
    private EditText getRecipeTitle;
    private EditText getCooking;
    private EditText getIngredients;
    private String recipeTitle;
    private String cooking;
    private String ingredients;
    public Button addButton;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recipe_add);

        recipeInfo = new RecipeInfo();
        getRecipeTitle = findViewById(R.id.recipe_title);
        getIngredients = findViewById(R.id.ingredients);
        getCooking = findViewById(R.id.cooking);
        addButton = findViewById(R.id.add_recipe);
        addButton.setOnClickListener(this);
    }

    /**
     *Enregistrement de recette
     * */
    @Override
    public void onClick(View v) {
        try {
            //Stocker les caractères saisis dans EditText dans une chaîne
            recipeTitle = getRecipeTitle.getText().toString();
            ingredients = getIngredients.getText().toString();
            cooking = getCooking.getText().toString();
            
            //Ajouter des informations à enregistrer dans la base de données sur la carte
            recipe.put("recipeTitle", recipeTitle);
            recipe.put("ingredients", ingredients);
            recipe.put("cooking", cooking);
            
            recipeInfo.recipeAdd(recipe);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Ce qui précède est le processus dans lequel la recette entrée lorsque le bouton est enfoncé est enregistrée dans le Firestore.

Processus pour obtenir une liste de recettes

GetRecipeList.java


    private String fireStoreCollectionPath = "recipes";
    private FirebaseFirestore fireStore = FirebaseFirestore.getInstance();
    private RecipeCallback mRecipeCallback;
    private ArrayList<Map> recipes = new ArrayList<>();

     /**
     *Obtenir la liste
     * */
    private OnCompleteListener onCompleteListener = new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : task.getResult()) {
                    recipes.add(document.getData());
                }
                mRecipeCallback.getRecipeMap(recipes);
            } else {
                mRecipeCallback.getRecipeMap(null);
            }
        }
    };

   /**
     *Voir la recette
     * */
    void recipeList(RecipeCallback recipeCallback) {
        mRecipeCallback = recipeCallback;
        fireStore.collection(fireStoreCollectionPath)
                .get()
                .addOnCompleteListener(onCompleteListener);
    }

RecipeActivity.java


private Context mContext;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recipe);

        mContext = getApplicationContext();
        mRecipeCallback = new RecipeCallback() {
            @Override
            //Rappel pour retourner la carte
            public void getRecipeMap(ArrayList<Map> recipes) {
                RecyclerView rv = (RecyclerView) findViewById(R.id.recyclerView);
                rv.setLayoutManager(new LinearLayoutManager(mContext));
                if (recipes == null) {
                    Log.d("fail", "Échec de lecture");
                    return;
                }
                final List<RecipeData> list = recipeListClass.createRecipeTitleList(recipes);
                
                //Refléter la liste dans la création de RecyclerView
                RecyclerViewAdapter adapter = new RecyclerViewAdapter(list);
                LinearLayoutManager llm = new LinearLayoutManager(mContext);
                rv.setHasFixedSize(true);
                rv.setLayoutManager(llm);
                rv.setAdapter(adapter);
                progressBar.setVisibility(ProgressBar.INVISIBLE);
                //Traitement du robinet d'élément
                adapter.setOnItemClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //Transition vers l'activité où les matériaux et la façon de fabriquer sont affichés
                    }
                });
            }
        };

        //Appeler la liste des recettes
        getRecipeList = new GetRecipeList();
        getRecipeList.recipeList();
    }

Vous pouvez maintenant obtenir la liste des recettes. Cette fois, j'ai décidé de me concentrer sur le Firestore, donc en ce qui concerne l'adepter de RecyclerView et ViewHolder. Si j'ai une chance, je voudrais vous donner un article séparé sur la façon de l'utiliser.

L'écran de l'application créée

Écran supplémentaire add.jpg Écran de liste list.jpg Après le traitement du robinet de la liste cooking.jpg

Impressions que j'ai faites

Firestore était trop pratique et plus facile que prévu à mettre en œuvre. Si quoi que ce soit, j'ai eu du mal avec mon manque de sens du design. Le traitement asynchrone est également effectué par la méthode Firestore utilisée cette fois, il n'est donc pas nécessaire de le faire à partir d'ici.

Conclusion: Firebase est le meilleur.

Recommended Posts

Créons rapidement une application qui utilise Firestore! !!
Créer un annotateur qui utilise kuromoji avec NLP4J [007]
Créez une application qui utilise l'API météo pour déterminer si vous avez besoin d'un parapluie.
Créez une application avec Spring Boot 2
Créez une application avec Spring Boot
Créons vous-même une instance avec .new. .. ..
Créer une application en spécifiant la version de Rails
Faisons JUnit.
Créer une image docker pour exécuter une application Java simple