Reputation: 95
Im trying to make an app that has Lobbies of users. What i thought of is having and Model for lobby and one of its attributes would be an ArrayList of Users. But from what ive read so far, it is easier said than done. This is what i have so far...
Lobby.class (Lobby Model)
@Parcel
public class Lobby {
private String owner;
private String location;
private double cost;
private String startDate;
private ArrayList<FirebaseUser> members;
public Lobby(){
}
public Lobby(String owner, String location, double cost, String startDate, ArrayList<FirebaseUser> members) {
this.owner = owner;
this.location = location;
this.cost = cost;
this.startDate = startDate;
this.members = members;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public double getCost() {
return cost;
}
public void setCost(double cost) {
this.cost = cost;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public ArrayList<FirebaseUser> getMembers() {
return members;
}
public void setMembers(ArrayList<FirebaseUser> members) {
this.members = members;
}
public String getDateText(){
String dateString = DateFormat.getDateInstance().format(new Date());
return dateString;
}
public int getTotalMembers(){
return members.size();
}
}
and this is where i save the Lobby to firebase
public class createLobby extends AppCompatActivity {
private static String TAG = "CreateLobby";
private TextView displayDate;
private DatePickerDialog.OnDateSetListener dateListener;
private EditText locIn, costIn;
private FirebaseAuth firebaseAuth;
private DatabaseReference databaseReference;
private DatabaseReference usernameGet;
private Button submitLobbyButton;
private String ownerName;
FirebaseUser user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_lobby);
firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();
databaseReference = FirebaseDatabase.getInstance().getReference();
usernameGet = databaseReference.child(user.getUid()).child("userName");
usernameGet.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ownerName = dataSnapshot.getValue(String.class);
Log.v("Username", ownerName);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
locIn = (EditText)findViewById(R.id.loc_input);
costIn = (EditText)findViewById(R.id.cost_input);
displayDate = (TextView)findViewById(R.id.date_picker);
displayDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(
createLobby.this, android.R.style.Theme_Holo_Light_Dialog_MinWidth,
dateListener, year, month, day);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
});
dateListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
month = month+1;
String date = month + "/" + dayOfMonth + "/" + year;
displayDate.setText(date);
}
};
submitLobbyButton = (Button)findViewById(R.id.create_lobby_button);
submitLobbyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
submitLobby();
}
});
}
public void submitLobby(){
firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();
DatabaseReference lobbyRef = FirebaseDatabase.getInstance().getReference(Constants.LOBBIES);
String owenerMan = ownerName;
String gameLoc = locIn.getText().toString();
Double gameCost = Double.parseDouble(costIn.getText().toString());
String gameDate = displayDate.getText().toString();
ArrayList<FirebaseUser> lobbyMembers = new ArrayList<>();
Lobby newLobby = new Lobby(owenerMan, gameLoc, gameCost, gameDate, lobbyMembers);
lobbyMembers.add(user);
lobbyRef.push().setValue(newLobby);
Log.v("creator", owenerMan);
Log.v("newLobby", newLobby.getStartDate());
Toast.makeText(getApplicationContext(), "Lobby Added!", Toast.LENGTH_SHORT).show();
}
}
When i run my code, an error appears saying that my getTotalMembers() function in my Lobby.class file is returning a null pointer exception. The array does not store
Upvotes: 2
Views: 2640
Reputation: 2644
Try once replacing this function, and let me know, what happens:
public void submitLobby(){
firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();
DatabaseReference lobbyRef = FirebaseDatabase.getInstance().getReference(Constants.LOBBIES);
String owenerMan = ownerName;
String gameLoc = locIn.getText().toString();
Double gameCost = Double.parseDouble(costIn.getText().toString());
String gameDate = displayDate.getText().toString();
ArrayList<FirebaseUser> lobbyMembers = new ArrayList<>();
lobbyMembers.add(user); // You were adding user into Array after calling constructor
Lobby newLobby = new Lobby(owenerMan, gameLoc, gameCost, gameDate, lobbyMembers);
lobbyRef.push().setValue(newLobby);
Log.v("creator", owenerMan);
Log.v("newLobby", newLobby.getStartDate());
Toast.makeText(getApplicationContext(), "Lobby Added!", Toast.LENGTH_SHORT).show();
}
Upvotes: 1