如何在Firebase数据库中显示特定当前登录用户的数据?

时间:2018-01-22 04:37:59

标签: java android firebase firebase-realtime-database

我的代码需要帮助。请告诉我如何显示当前登录用户输入的数据。比如,过滤数据,如果一个用户上传数据,他/她只能看到她/他的数据,而不能看到其他人(Firebase数据库)。这是我的代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
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;
import com.timothy.chlogbook1.R;

import java.util.ArrayList;
import java.util.List;

public class Database extends AppCompatActivity {

    EditText editTextDate;
    EditText editTextName;
    EditText editTextMethod;
    EditText editTextTopics;
    EditText editTextSummary;
    Button buttonAdd;
    Spinner spinnerGrade;

    DatabaseReference databaseLogbook;
    ListView listViewLogbook;
    List<Logbook> logbookList;
    FirebaseUser user;


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

        databaseLogbook = FirebaseDatabase.getInstance().getReference("Logbook");


        editTextDate = (EditText) findViewById(R.id.editTextDate);
        buttonAdd = (Button) findViewById(R.id.buttonAdd);
        editTextName = (EditText) findViewById(R.id.editTextName);
        editTextMethod = (EditText) findViewById(R.id.editTextMethod);
        editTextTopics = (EditText) findViewById(R.id.editTextTopics);
        editTextSummary = (EditText) findViewById(R.id.editTextSummary);
        spinnerGrade = (Spinner) findViewById(R.id.spinnerGrade);

        listViewLogbook = (ListView) findViewById(R.id.listViewLogbook);
        logbookList = new ArrayList<>();

        buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addLogbook();

            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();

        databaseLogbook.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                logbookList.clear();

                for(DataSnapshot logbookSnapshot: dataSnapshot.getChildren()){
                    Logbook logbook = logbookSnapshot.getValue(Logbook.class);

                    logbookList.add(logbook);

                }

                LogbookList adapter = new LogbookList(Database.this, logbookList);
                listViewLogbook.setAdapter(adapter);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void addLogbook(){
        String date = editTextDate.getText().toString().trim();
        String fullname = editTextName.getText().toString().trim();
        String grade = spinnerGrade.getSelectedItem().toString();
        String method = editTextMethod.getText().toString().trim();
        String topics = editTextTopics.getText().toString().trim();
        String summary = editTextSummary.getText().toString().trim();


        if(!TextUtils.isEmpty(fullname)) {

            String id = databaseLogbook.push().getKey();
            Logbook logbook = new Logbook(id,date,fullname,grade,method,topics,summary);
            databaseLogbook.child(id).setValue(logbook);
            Toast.makeText(this, "Logbook Added", Toast.LENGTH_LONG).show();

        }else{
            Toast.makeText(this, "You should enter your full name", Toast.LENGTH_LONG).show();
        }
    }
}

因此,在此代码中,它可以显示Firebase数据库中的数据,但是,它会显示所有数据。

1 个答案:

答案 0 :(得分:0)

用于向firebase写入数据:

    private void addLogbook(){
        String date = editTextDate.getText().toString().trim();
        String fullname = editTextName.getText().toString().trim();
        String grade = spinnerGrade.getSelectedItem().toString();
        String method = editTextMethod.getText().toString().trim();
        String topics = editTextTopics.getText().toString().trim();
        String summary = editTextSummary.getText().toString().trim();


        if(!TextUtils.isEmpty(fullname)) {

//            String id = databaseLogbook.push().getKey();
            Logbook logbook = new Logbook(date,fullname,grade,method,topics,summary);
            String userEmail = UserEmailIdString.replace(".", ",");
            databaseLogbook.child(userEmail).setValue(logbook);
            Toast.makeText(this, "Logbook Added", Toast.LENGTH_LONG).show();

        }else{
            Toast.makeText(this, "You should enter your full name", Toast.LENGTH_LONG).show();
        }
    }

从firebase读取数据:

String userEmail = UserEmailIdString.replace(".", ",");
databaseLogbook = FirebaseDatabase.getInstance().getReference("Logbook")
.child(userEmail);

通过这种读写方式,只有登录用户才能看到他们的数据