Отправка пользователя в MainActivity после проверки базы данных с ошибкой Firebase - PullRequest
0 голосов
/ 05 декабря 2018

После LoginActivity мое приложение переходит к SetupActivity, в котором пользователю необходимо ввести свою электронную почту, и есть кнопка сохранения, которая загружает электронную почту в firebase, а затем она должна перейти в MainActivity, и это должно произойти только один раз для пользователя. Проблема в том, что кнопка «Сохранить» сохраняет электронную почту в базе данных, но не переходит к mainActivity и снова показывает setupActivity.

SetupActivity.java

  
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.HashMap;

public class SetupActivity extends AppCompatActivity {

    private EditText mUserEmail, mUserAge;
    private Button mSaveSetupButton;

    private FirebaseAuth mAuth;
    private DatabaseReference UsersRef;

    String currentUserId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setup);

        mAuth = FirebaseAuth.getInstance();

        currentUserId = mAuth.getCurrentUser().getUid();
        UsersRef = FirebaseDatabase.getInstance().getReference().child(currentUserId);
        mUserEmail = findViewById(R.id.userEmailInput);
        mUserAge = findViewById(R.id.userAgeInput);
        mSaveSetupButton = findViewById(R.id.saveSetupButton);

        mSaveSetupButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SaveAccountSetupInformation();
            }
        });
    }

    private void SaveAccountSetupInformation()
    {
        String useremail = mUserEmail.getText().toString();
        String userage = mUserAge.getText().toString();

        if (TextUtils.isEmpty(useremail)) {
            Toast.makeText(this, "Please enter your email.", Toast.LENGTH_SHORT).show();
        }
        if (TextUtils.isEmpty(userage)) {
            Toast.makeText(this, "Please write your age.", Toast.LENGTH_SHORT).show();
        }
        else
        {
            //you can put some progress bar here

            HashMap<String, Object> userMap = new HashMap<String, Object>();
            userMap.put("email", useremail);
            userMap.put("age", userage);
            userMap.put("gender", "");
            userMap.put("loves", "0");
            userMap.put("stars", "0");
            UsersRef.updateChildren(userMap).addOnCompleteListener(new OnCompleteListener() {
                @Override
                public void onComplete(@NonNull Task task)
                {
                    if(task.isSuccessful())
                    {
                        SendUserToMainActivity();
                    }
                    else
                    {
                        String errormessage =  task.getException().getMessage();
                        Toast.makeText(SetupActivity.this, "Error Occured: " + errormessage, Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

    }

    private void SendUserToMainActivity() {
        Intent MainIntent = new Intent(SetupActivity.this, MainActivity.class);
        MainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(MainIntent);
        finish();
    }
}

MainActivity.java

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    private BottomNavigationView mMainBottomNav;
    private FrameLayout mMainFrame;
    private ActionBarDrawerToggle actionBarDrawerToggle;

    private HomeFragment homeFragment;
    private NotificationsFragment notificationsFragment;
    private MessagesFragment messagesFragment;

    private NavigationView navigationView;
    private DrawerLayout drawerLayout;
    private RecyclerView postList;
    private Toolbar mToolbar;

    private FirebaseAuth mAuth;
    private DatabaseReference UsersRef;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAuth = FirebaseAuth.getInstance();
        UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");

        navigationView = findViewById(R.id.navigation_view);
        View navView = navigationView.inflateHeaderView(R.layout.navigation_header);

        mMainFrame = findViewById(R.id.main_container);
        mMainBottomNav = findViewById(R.id.main_bottom_nav);

        //Toolbar
        mToolbar = findViewById(R.id.main_page_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Home");

        homeFragment = new HomeFragment();
        notificationsFragment = new NotificationsFragment();
        messagesFragment = new MessagesFragment();

        // EDITED
        // setFragment(homeFragment);

        drawerLayout = findViewById(R.id.drawable_layout);
        actionBarDrawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.drawer_open, R.string.drawer_close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener()
        {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem)
            {
                UserMenuSelector(menuItem);
                return false;
            }
        });
        mMainBottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener()
        {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem)
            {

                switch (menuItem.getItemId())
                {
                    case R.id.nav_home :
                        setFragment(homeFragment);
                        return true;

                    case R.id.nav_notif :
                        setFragment(notificationsFragment);
                        return true;

                    case R.id.nav_messages :
                        setFragment(messagesFragment);
                        return true;

                    default :
                        return false;
                }
            }
        });

    }

    @Override
    protected void onStart()
    {
        super.onStart();
        //Check the user if they are login or not
        FirebaseUser currentUser =  mAuth.getCurrentUser();

        if(currentUser == null)
        {
            SendUserToLandingActivity();
        }
        else
        {
            CheckUserExistence();
        }
    }

    private void CheckUserExistence()
    {
        final String current_user_id = mAuth.getCurrentUser().getUid();

        UsersRef.addValueEventListener(new ValueEventListener()
        {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot)
            {
                if(!dataSnapshot.hasChild(current_user_id))
                {
                    SendUserToSetUpActivity();
                }
                else
                {
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError)
            {
            }
        });
    }

    private void SendUserToMainActivity()
    {
        Intent MainIntent = new Intent(MainActivity.this, MainActivity.class);
        MainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(MainIntent);
        finish();
    }

    private void SendUserToSetUpActivity()
    {
        Intent SetupIntent = new Intent(MainActivity.this, SetupActivity.class);
        SetupIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(SetupIntent);
        finish();
    }

    private void SendUserToLandingActivity()
    {
        Intent loginIntent = new Intent(MainActivity.this, LandingActivity.class);
        loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(loginIntent);
        finish();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        if(actionBarDrawerToggle.onOptionsItemSelected(item))
        {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void UserMenuSelector(MenuItem menuItem)
    {
        switch (menuItem.getItemId())
        {
            case R.id.nav_profile:
                Toast.makeText(this, "Profile", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_bookmarks:
                Toast.makeText(this, "Bookmarks", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_settings:
                Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_about:
                Toast.makeText(this, "About", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_logout:
                mAuth.signOut();
                SendUserToLandingActivity();
                break;
        }
    }

    private void setFragment(Fragment fragment)
    {
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.main_container, fragment);
        fragmentTransaction.commit();
    }
}

1 Ответ

0 голосов
/ 11 декабря 2018

решаемая.Для всех, у кого есть проблема

, потому что он неправильно хранит в базе данных на MainActivity.java, он хранится для отдельных пользователей, а не для пользователей, поскольку PostActivity.java получает

, поэтому я изменил MainActivity, добавив parrent«Пользователи», пока я забыл поставить его

UsersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...