Ich habe mich entschlossen, in kurzer Zeit eine Smartphone-Anwendung zu erstellen. Ich war an Firestore interessiert, also wollte ich es benutzen. Ich wollte etwas machen, das eintönig ist, aber nützlich sein könnte. Ich dachte darüber nach, eine Ausgabe zu machen und sie zu meinem eigenen Wissen zu machen.
Sie können Kochrezepte registrieren. Jeder, dem die App gehört, kann die Rezepte der bisher registrierten Gerichte sehen.
Firebase-Konsole Erstellen Sie hier ein Projekt und befolgen Sie die Anweisungen zur Installation.
Im Rahmen des Projekts
Platzieren Sie google_service.json direkt unter der App
Fügen Sie den folgenden Code hinzu
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'
}
}
Das Setup ist jetzt abgeschlossen.
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", "Die Registrierung war erfolgreich");
}
};
private OnFailureListener onFailureListener = new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("fail", "Anmeldung gescheitert");
}
};
/**
*Prozess der Registrierung von Rezepten im Firestore
* @param map Rezeptinformationen im Firestore registriert
*/
public void recipeAdd(Map map) {
//Generation der Firestore-Sammlung.
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);
}
/**
*Rezeptregistrierung
* */
@Override
public void onClick(View v) {
try {
//Speichern Sie die in EditText eingegebenen Zeichen in einer Zeichenfolge
recipeTitle = getRecipeTitle.getText().toString();
ingredients = getIngredients.getText().toString();
cooking = getCooking.getText().toString();
//Fügen Sie Informationen hinzu, die in der Datenbank registriert werden sollen, um sie zuzuordnen
recipe.put("recipeTitle", recipeTitle);
recipe.put("ingredients", ingredients);
recipe.put("cooking", cooking);
recipeInfo.recipeAdd(recipe);
} catch (Exception e) {
e.printStackTrace();
}
}
Das Obige ist der Vorgang, bei dem das beim Drücken der Taste eingegebene Rezept im Firestore registriert wird.
GetRecipeList.java
private String fireStoreCollectionPath = "recipes";
private FirebaseFirestore fireStore = FirebaseFirestore.getInstance();
private RecipeCallback mRecipeCallback;
private ArrayList<Map> recipes = new ArrayList<>();
/**
*Liste abrufen
* */
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);
}
}
};
/**
*Rezept anzeigen
* */
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
//Rückruf zur Rückgabe der Karte
public void getRecipeMap(ArrayList<Map> recipes) {
RecyclerView rv = (RecyclerView) findViewById(R.id.recyclerView);
rv.setLayoutManager(new LinearLayoutManager(mContext));
if (recipes == null) {
Log.d("fail", "Lesefehler");
return;
}
final List<RecipeData> list = recipeListClass.createRecipeTitleList(recipes);
//Reflektieren Sie die Liste in der RecyclerView-Erstellung
RecyclerViewAdapter adapter = new RecyclerViewAdapter(list);
LinearLayoutManager llm = new LinearLayoutManager(mContext);
rv.setHasFixedSize(true);
rv.setLayoutManager(llm);
rv.setAdapter(adapter);
progressBar.setVisibility(ProgressBar.INVISIBLE);
//Item Tap-Verarbeitung
adapter.setOnItemClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Übergang zur Aktivität, in der Materialien und Herstellungsverfahren angezeigt werden
}
});
}
};
//Rezeptliste aufrufen
getRecipeList = new GetRecipeList();
getRecipeList.recipeList();
}
Jetzt können Sie die Liste der Rezepte erhalten. Dieses Mal habe ich mich entschlossen, mich auf den Firestore zu konzentrieren, also in Bezug auf Recycler Views Adepter und View Holder. Wenn ich eine Chance habe, möchte ich Ihnen einen separaten Artikel über die Verwendung geben.
Zusätzlicher Bildschirm Listenbildschirm Nach der Liste tippen Sie auf Verarbeitung
Firestore war zu bequem und einfacher als erwartet zu implementieren. Wenn überhaupt, hatte ich mit meinem mangelnden Sinn für Design zu kämpfen. Die asynchrone Verarbeitung wird auch von der diesmal verwendeten Firestore-Methode durchgeführt, sodass dies von hier aus nicht erforderlich ist.
Fazit: Firebase ist das Beste.
Recommended Posts