Ich versuche meine Hände auf Firebase zum ersten Mal und ich stieß auf ein Problem. Das Abrufen von Daten aus meinem Firebase-Speicher/Datenbank funktioniert nur, wenn die Getter-Methode dem Variablennamen entspricht oder die Mitgliedsvariablen öffentlich sind. Aber meine Namenskonvention für Member-Variablen ist mVariableName
und ich lasse "M" aus meinem Getter-Methoden-Namen. Jetzt habe ich mehrere Fragen:Firebase Getter-Methoden und Namenskonvention
Macht die Modellmitgliedsvariablen Öffentlichkeit eine gangbare Wahl oder ist diese schlechte Praxis? Was ist der beste Ansatz hier für die Benennung? Sollte ich die Getter-Methoden getmName
benennen oder sollte ich das "m" aus den Namen der Mitgliedsvariablen herauslassen? Sollte ich es dann für das ganze Projekt oder nur für diese Klasse ändern? Ich möchte nur wissen, was die besten Praktiken hier sind.
Dies ist die Klasse, die die Einträge lautet:
public class ImagesActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ImageAdapter mAdapter;
private FirebaseStorage mFirebaseStorage;
private DatabaseReference mDatabase;
private List<Upload> mUploads;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_images);
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mUploads = new ArrayList<>();
mFirebaseStorage = FirebaseStorage.getInstance();
mDatabase = FirebaseDatabase.getInstance().getReference(Constants.DATABASE_PATH_UPLOADS);
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Upload upload = postSnapshot.getValue(Upload.class);
Log.i("UPLOAD", "Upload : " + upload.getName());
mUploads.add(upload);
}
mAdapter = new ImageAdapter(getApplicationContext(), mUploads);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
Und das sind die Regeln:
Datenbank:
{
"rules": {
".read": true,
".write": true
}
}
Lagerung:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if true;
}
}
}
Und die Upload.klasse (Funktioniert nur, wenn entweder Felder sind öffentliche oder Getter-Methode Namen passen m-Konvention, die hässlich ist):
public class Upload {
public String mName;
public String mImageUrl;
public Upload() {
}
public Upload(String name, String imageUrl) {
if (name.trim().equals("")) {
name = "No Name";
}
mName = name;
mImageUrl = imageUrl;
}
public String getName() {
return mName;
}
public String getImageUrl() {
return mImageUrl;
}
}
Ich versuche das, aber auf diese Weise kann ich die Daten aus Firebase nicht lesen. Es funktioniert nur, wenn entweder die Getter-Methodennamen den Variablennamen entsprechen oder die Variablen öffentlich sind:/ –
Es wird funktionieren, haben Sie einen öffentlichen leeren Konstruktor? Im Benutzerfall wäre dies "public User() {}". – SUPERCILEX
Ja, ich habe einen leeren öffentlichen Konstruktor –