I am trying to create a register activity to allow a user to register however I keep getting the error:
Cannot resolve method ‘setTimestampsInSnapshotsEnabled’ in ‘Builder'”
It’s only the section which has the setTimestampsInSnapshotsEnabled
that is giving me the issue. Do I need an implementation?
Here is my Java code:
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "RegisterActivity"; //widgets private EditText mEmail, mPassword, mConfirmPassword; private ProgressBar mProgressBar; //vars private FirebaseFirestore mDb; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); mEmail = (EditText) findViewById(R.id.input_email); mPassword = (EditText) findViewById(R.id.input_password); mConfirmPassword = (EditText) findViewById(R.id.input_confirm_password); mProgressBar = (ProgressBar) findViewById(R.id.progressBar); findViewById(R.id.btn_register).setOnClickListener(this); mDb = FirebaseFirestore.getInstance(); hideSoftKeyboard(); } /** * Register a new email and password to Firebase Authentication * @param email * @param password */ public void registerNewEmail(final String email, String password){ showDialog(); FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); if (task.isSuccessful()){ Log.d(TAG, "onComplete: AuthState: " + FirebaseAuth.getInstance().getCurrentUser().getUid()); //insert some default data User user = new User(); user.setEmail(email); user.setUsername(email.substring(0, email.indexOf("@"))); user.setUser_id(FirebaseAuth.getInstance().getUid()); FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setTimestampsInSnapshotsEnabled(true) .build(); mDb.setFirestoreSettings(settings); FirebaseFirestoreSettings newUserRef = mDb .collection(getString(R.string.collection_users)) .document(FirebaseAuth.getInstance().getUid()); newUserRef.set(user).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { hideDialog(); if(task.isSuccessful()){ redirectLoginScreen(); }else{ View parentLayout = findViewById(android.R.id.content); Snackbar.make(parentLayout, "Something went wrong.", Snackbar.LENGTH_SHORT).show(); } } }); } else { View parentLayout = findViewById(android.R.id.content); Snackbar.make(parentLayout, "Something went wrong.", Snackbar.LENGTH_SHORT).show(); hideDialog(); } // ... } }); } /** * Redirects the user to the login screen */ private void redirectLoginScreen(){ Log.d(TAG, "redirectLoginScreen: redirecting to login screen."); Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); startActivity(intent); finish(); } private void showDialog(){ mProgressBar.setVisibility(View.VISIBLE); } private void hideDialog(){ if(mProgressBar.getVisibility() == View.VISIBLE){ mProgressBar.setVisibility(View.INVISIBLE); } } private void hideSoftKeyboard(){ this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_register:{ Log.d(TAG, "onClick: attempting to register."); //check for null valued EditText fields if(!isEmpty(mEmail.getText().toString()) && !isEmpty(mPassword.getText().toString()) && !isEmpty(mConfirmPassword.getText().toString())){ //check if passwords match if(doStringsMatch(mPassword.getText().toString(), mConfirmPassword.getText().toString())){ //Initiate registration task registerNewEmail(mEmail.getText().toString(), mPassword.getText().toString()); }else{ Toast.makeText(RegisterActivity.this, "Passwords do not Match", Toast.LENGTH_SHORT).show(); } }else{ Toast.makeText(RegisterActivity.this, "You must fill out all the fields", Toast.LENGTH_SHORT).show(); } break; } } } }
Advertisement
Answer
If I look at the current documentation for FirebaseFirestoreSettings.Builder
, I don’t see any setTimestampsInSnapshotsEnabled
method. So that probably explains the error message: you’re trying to call a method that doesn’t exist.
My guess is that your code was meant for an older version of the SDK when the method did exist. Since it doesn’t exist anymore now, you either have to use the version of the SDK that the code was made for, or remove the call.
Update: it looks like timestampsInSnapshotsEnabled
was removed in version 22 of the Android SDK for Firestore back in October 2020.