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.
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.
Console Firebase Créez un projet ici et suivez les instructions pour l'installer.
Au sein du projet
Placez google_service.json directement sous l'application
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.
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.
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.
Écran supplémentaire Écran de liste Après le traitement du robinet de la liste
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