@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile_edit); ParseUser currentUser = ParseUser.getCurrentUser(); // get UI components userPic = (ImageView) findViewById(R.id.view_curr_pic); nameEdit = (EditText) findViewById(R.id.profile_name_edit); addressEdit = (EditText) findViewById(R.id.profile_address_edit); phoneEdit = (EditText) findViewById(R.id.profile_user_phone_edit); phoneShareEdit = (Switch) findViewById(R.id.phone_switch_edit); resetPassword = (Button) findViewById(R.id.reset_password_button); saveChangesB = (Button) findViewById(R.id.save_changes_button); changePicB = (Button) findViewById(R.id.change_pic_button); // init ui components with user details ParseFile p = (ParseFile) currentUser.get("photo"); if (p != null) { try { Bitmap b = BitmapFactory.decodeByteArray(p.getData(), 0, p.getData().length); userPic.setImageBitmap(b); } catch (ParseException e) { Log.d("ProfileEdit", e.getMessage()); } } nameEdit.setHint(currentUser.get("name").toString()); addressEdit.setHint(Utils.addressToString(currentUser.getJSONArray("address"))); phoneEdit.setHint(currentUser.get("phone").toString()); phoneShareEdit.setChecked(currentUser.getBoolean("sharePhone")); resetPassword.setOnClickListener(this); saveChangesB.setOnClickListener(this); changePicB.setOnClickListener(this); // handle address selection ImageButton addressChangeButton = (ImageButton) findViewById(R.id.profile_address_change_edit); addressChangeButton.setOnClickListener(this); // handle user availability changes final LinearLayout availabilityItems = (LinearLayout) findViewById(R.id.edit_profile_availability_items); availabilityAdapter = new UserAvailabilityAdapter(this); availabilityAdapter.registerDataSetObserver( new DataSetObserver() { @Override public void onChanged() { availabilityItems.removeAllViews(); for (int i = 0; i < availabilityAdapter.getCount(); i++) { View row = availabilityAdapter.getView(i, null, availabilityItems); availabilityItems.addView(row); } } @Override public void onInvalidated() { availabilityItems.removeAllViews(); } }); // query all availability of current user and fill the adapter final ParseQuery<ParseObject> userAvailabilityQuery = new ParseQuery<>("UserAvailability"); userAvailabilityQuery.whereEqualTo("user", currentUser); userAvailabilityQuery.findInBackground( new FindCallback<ParseObject>() { @Override public void done(List<ParseObject> userAvailabilities, ParseException e) { if (e == null) { userAvailabilitiesList = userAvailabilities; int id = 0; for (ParseObject userAvailability : userAvailabilities) { AvailabilityRecord record = new AvailabilityRecord(); record.setTimeFrom(userAvailability.getInt("startTime")); record.setTimeUntil(userAvailability.getInt("endTime")); record.setTag(id++); JSONArray days = userAvailability.getJSONArray("days"); for (int i = 0; i < days.length(); i++) { try { record.setDay(days.getInt(i) - 1, true); } catch (JSONException e1) { } } availabilityAdapter.add(record); } availabilityAdapter.add(new AvailabilityRecord()); availabilityAdapter.notifyDataSetChanged(); } } }); }