簡體   English   中英

如何使用 Firebase 在 Android Studio 項目中將記錄的用戶數據作為用戶名檢索到導航標頭

[英]How can I retrieve Logged user data to nav header as Username in Android studio project with Firebase

我是 Android 項目的新手。 我用 Firebase 創建項目。 在這個項目中,我想將記錄的用戶名添加到導航標題中的 textview。 我用於登錄或注冊模型選項。 但我不能。 有人對這個有經驗么? 我的 firebase 數據庫數據顯示如下。 在此處輸入圖片說明

我想要這樣在此處輸入圖片說明

我的家庭活動是這個

package com.cavad.firebaseproject;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;


public class Home extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, 
 R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) 
 findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    Fragment category = new CategoryFragment();
    this.setDefaultFragment(category);
 }

 private void setDefaultFragment(Fragment defaultFragment)
 {
    this.replaceFragment(defaultFragment);
 }

 public void replaceFragment(Fragment destFragment)
 {
    FragmentManager fragmentManager = this.getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = 
 fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.category, destFragment);
    fragmentTransaction.commit();
 }

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.home, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_camera) {
        // Handle the camera action
    } else if (id == R.id.nav_gallery) {

    } else if (id == R.id.nav_slideshow) {

    } else if (id == R.id.nav_manage) {

    } else if (id == R.id.nav_share) {

    } else if (id == R.id.nav_send) {

    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
  }
 }

我的 nav_header xml 文件是這個 nav_header_home.xml //

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
android:gravity="bottom"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">

<TextView
    android:id="@+id/userName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="userName"
    android:textColor="@color/white"
    android:textSize="20sp"
    android:layout_marginTop="15dp"
    android:layout_marginBottom="10dp"
    android:textStyle="bold"/>

</LinearLayout>   

我的模型類是這個

 package com.cavad.firebaseproject.Model;

public class User {

private String userName;
private String password;
private String email;

public User(){
}

public User(String userName, String password, String email) {
    this.userName = userName;
    this.password = password;
    this.email = email;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}
}

我的 Firebase 數據庫規則是這樣的

  {
    "rules": {
    ".read": true,
    ".write": true
    }
   }

我的登錄活動是這樣的

 package com.cavad.firebaseproject;

 import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.Toast;

 import com.cavad.firebaseproject.Model.User;
 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 Login extends Fragment {

EditText user, password;
ImageView signin;

FirebaseDatabase database;
DatabaseReference users;

public Login() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_login, container, 
 false);

    database = FirebaseDatabase.getInstance();
    users = database.getReference("Users");

    user = view.findViewById(R.id.name);
    password = view.findViewById(R.id.password);
    signin = view.findViewById(R.id.submit);

    signin.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){

  signin(user.getText().toString(),password.getText().toString());
        }
    });

    return view;
   }
  private void signin(final String user, final String pwd){
    users.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.child(user).exists())
            {
                if (!user.isEmpty())
                {
                    User login = 
  dataSnapshot.child(user).getValue(User.class);
                    if (login.getPassword().equals(pwd))
                    {
                        Toast.makeText(getActivity(), "Uğurla daxil 
 oldunuz", Toast.LENGTH_SHORT).show();
                        startActivity(new 
 Intent(getActivity().getApplication(), Home.class));

                    }
                    else
                        Toast.makeText(getActivity(), "Zəhmət olmasa 
 Şifrəni düzgün daxil edin", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Toast.makeText(getActivity(), "Zəhmət olmasa 
 İstifadəçi adınızı daxil edin", Toast.LENGTH_SHORT).show();
                }
            }
            else
                Toast.makeText(getActivity(), "Belə bir istifadəçi adı 
   tapılmadı !!!", Toast.LENGTH_SHORT).show();
        }

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

        }
    });
  }
 }

我的登錄活動 xml 是這個

 <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".Login"
android:background="@color/colorPrimaryDark"
android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2"
    android:layout_marginTop="7dp"
    android:layout_marginBottom="7dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="7dp"
            android:layout_marginBottom="7dp"
            app:hintEnabled="false"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp">

            <EditText
                android:id="@+id/name"
                android:layout_width="match_parent"
                android:layout_height="48dp"
                android:hint="@string/name"
                android:inputType="text"
                android:textSize="20sp"
                android:drawableStart="@drawable/ic_user"
                android:drawableLeft="@drawable/ic_user"
                android:drawablePadding="10dp"
                android:background="@drawable/edttext_background"
                android:paddingRight="10dp"
                android:paddingLeft="10dp"/>
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="7dp"
            android:layout_marginBottom="7dp"
            app:hintEnabled="false"
            app:passwordToggleDrawable="@drawable/visibility"
            app:passwordToggleEnabled="true"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp">

            <EditText
                android:id="@+id/password"
                android:layout_width="match_parent"
                android:layout_height="48dp"
                android:textSize="20sp"
                android:inputType="textPassword"
                android:hint="@string/password"
                android:drawableStart="@drawable/ic_lock"
                android:drawableLeft="@drawable/ic_lock"
                android:background="@drawable/edttext_background"
                android:drawablePadding="10dp"
                android:paddingRight="10dp"
                android:paddingLeft="10dp" />
        </android.support.design.widget.TextInputLayout>

        <ImageView
            android:id="@+id/submit"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:gravity="center"
            android:layout_gravity="center"
            android:src="@drawable/ic_check"
            android:background="@drawable/check_background"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"/>

    </LinearLayout>

</LinearLayout>

</LinearLayout>

步驟1.獲取當前登錄的用戶: -

獲取當前用戶的推薦方法是調用getCurrentUser方法。 如果沒有用戶登錄,則getCurrentUser返回null。示例: -

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// Name, email address, and profile photo Url
String name = user.getDisplayName();
String email = user.getEmail();
Uri photoUrl = user.getPhotoUrl();

// Check if user's email is verified
boolean emailVerified = user.isEmailVerified();

// The user's ID, unique to the Firebase project. Do NOT use this value to
// authenticate with your backend server, if you have one. Use
// FirebaseUser.getIdToken() instead.
String uid = user.getUid();
}

如需更多,請查看鏈接

管理Firebase中的用戶

步驟2. 將其設置為導航視圖標題: -您可以獲得如下文本視圖 : -

NavigationView navigationView = (NavigationView) findViewById(R.id.your_nav_view_id);
View header = navigationView.getHeaderView(0)
TextView text = (TextView) header.findViewById(R.id.textView);

如果您想檢索存儲在實時數據庫中的登錄用戶電子郵件、用戶名和圖片,並將它們顯示在導航標題中,那么您只需按照以下步驟操作:

    NavigationView navigationView = findViewById(R.id.nav_view);
        database = FirebaseDatabase.getInstance();
        auth = FirebaseAuth.getInstance();

    database.getReference().child("Users").child(auth.getUid())
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                //we have Users class which contain user properties and methods.
                    User user = snapshot.getValue(User.class);

                    View header = navigationView.getHeaderView(0);
                    nav_email = header.findViewById(R.id.nav_email);
                    nav_username = header.findViewById(R.id.nav_username);
                    nav_profile = header.findViewById(R.id.nav_profilePic);

            Picasso.get().load(user.getProfilePic()).placeholder(R.drawable.avatar).into(nav_profile);
                    nav_email.setText(user.getMail());
                    nav_username.setText(user.getUserName());
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });

如果您想使用 Picasso 從實時數據庫中檢索圖像,然后將其設置在導航標題 imageview 上,則在您的包 Gradle 模塊文件中添加以下依賴項:

    implementation 'com.squareup.picasso:picasso:2.71828'

然后你可以在你的項目中使用畢加索。

在導航標題中從 firebase 實時數據庫中檢索記錄的用戶數據

// xml文件

    <TextView
        android:id="@+id/your_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/gotham_bold"
        android:text="User Name"
        android:textColor="@color/brown"
        android:textSize="18sp"
     />

        <TextView
            android:id="@+id/user_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/gotham_book"
            android:text="User Name"
            android:textColor="@color/brown"
           android:textSize="15sp"
            android:layout_gravity="center"
            />

// 代碼

    firebaseDatabase.getReference().child("Users").child(auth.getUid())
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                   
                    User user = snapshot.getValue(User.class);

                    View header = navigationView.getHeaderView(0);

                    name = header.findViewById(R.id.your_name);
                    username = header.findViewById(R.id.user_name);

                    name.setText(user.getName1());
                    username.setText("@" + user.getUsername1());
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM