如何在firebase中以列表视图显示数据(包含与用户电子邮件相同的电子邮件的区块)

我想显示使用他的邮件存储在firebase中登录的用户的ListView中的数据。例如登录用户的邮件是[email protected],并且ListView显示块块中的所有项目表示存储在firebase中的用户或项目的完整详细信息。例如,有一本书,firebase包含它的书名,内容,描述,doi,作者姓名等。我想要的是,如果作者登录只有他的书会显示书名,说明,内容和doi(书籍参考只是一个例子)。我的问题是我的列表视图显示有关作业的所有项目,包括属于其他用户的项目,我希望用户只编辑他自己发布的作业。那么,我应该写什么firebase查询来实现这一点,这里是我的代码。如何在firebase中以列表视图显示数据(包含与用户电子邮件相同的电子邮件的区块)

火力

Firebase

Java类

public class WorkActivity extends AppCompatActivity { 

ListView lv;

Button ShowButton;

// Define a String ArrayList for the job

private ArrayList<String> jobdes=new ArrayList<>();

// Define an ArrayAdapter for the list

private ArrayAdapter<String> arrayAdapter;

// Declaring String variable (In which we are storing firebase serverURL).

public static final String Firebase_Server_URL = "https://jobaps70.firebaseio.com/";

public static final String Firebase_Server_URL1 = "https://jobaps70.firebaseio.com/jobs";

// Declaring String variables to store name & phone number get from EditText.

String PriceHolder, JobDescriptionHolder;

FirebaseHelper helper;

// Declaring Firebase object.

Firebase firebase,firebase1;

// Creating FirebaseAuth.

FirebaseAuth firebaseAuth ;

// Creating FirebaseAuth.

FirebaseUser firebaseUser;

// Creating Boolean variable that holds EditText is empty or not status.

Boolean EditTextStatus ;

TextView ShowDataTextView ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_work_jobs);

// Actionbar

getSupportActionBar().setDisplayShowHomeEnabled(true);

getSupportActionBar().setIcon(R.drawable.logo);

getSupportActionBar().setBackgroundDrawable(new

ColorDrawable(getResources().getColor(R.color.Snow)));

ShowButton = (Button)findViewById(R.id.show);

// Adding MainActivity context into Firebase context.

Firebase.setAndroidContext(WorkActivity.this);

// Passing firebase Server URL into firebase object.

firebase = new Firebase(Firebase_Server_URL);

firebase1=new Firebase(Firebase_Server_URL1);

firebaseAuth = FirebaseAuth.getInstance();

// On activity start check whether there is user previously logged in or not.

if(firebaseAuth.getCurrentUser() == null){

// Finishing current Profile activity.

finish();

// If user already not log in then Redirect to LoginActivity .

Intent intent = new Intent(WorkActivity.this, LoginActivity.class);

startActivity(intent);

// Showing toast message.

Toast.makeText(WorkActivity.this, "Please Log in to continue",

Toast.LENGTH_LONG).show();

}

// Adding firebaseAuth current user info into firebaseUser object.

firebaseUser = firebaseAuth.getCurrentUser();

// Getting logged in user email from firebaseUser.getEmail() method and set into TextView.

setTitle(firebaseUser.getEmail());

setTitleColor(R.color.DarkGray);

firebase.child("jobs");

// Associate the jobs' list with the corresponding ListView

lv = (ListView) findViewById(R.id.lvshow);

// Set the ArrayAdapter to the ListView

arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, jobdes);

lv.setAdapter(arrayAdapter);

// Attach a ChildEventListener to the teacher database, so we can retrieve the job entries

firebase.addChildEventListener(new ChildEventListener() {

@Override

public void onChildAdded(DataSnapshot dataSnapshot, String s) {

// Get the value from the DataSnapshot and add it to the jobs' list

JobDetails jo = (JobDetails) dataSnapshot.getValue(JobDetails.class);

String joString = String.valueOf(jo);

arrayAdapter.add(joString);

//

// Notify the ArrayAdapter that there was a change

arrayAdapter.notifyDataSetChanged();

}

@Override

public void onChildChanged(DataSnapshot dataSnapshot, String s) {

}

@Override

public void onChildRemoved(DataSnapshot dataSnapshot) {

}

@Override

public void onChildMoved(DataSnapshot dataSnapshot, String s) {

}

@Override

public void onCancelled(FirebaseError databaseError) {

}

});

}

}

的JobDetail

public class JobDetails { 

private String price;

private String jobDescription;

private String jobSpinner;

public String email;

public JobDetails() {

// This is default constructor.

}

public String getPrice() {

return price;

}

public void setPrice(String pri) {

this.price = pri;

}

public String getjobDescription() {

return jobDescription;

}

public void setjobDescription(String jobd) {

this.jobDescription = jobd;

}

public void setjob(String jry) {

this.jobSpinner = jry ;

}

public String getjob() {

return jobSpinner;

}

public void setemail(String jel) {

this.email = jel ;

}

public String getemail() {

return email;

}

@Override

public String toString() {

return this.jobSpinner + ": " + this.jobDescription+ ": " +price;

}

}

XML

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 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="match_parent"

tools:context="com.gumption.zeeshanahmed.jobaps.WorkActivity">

<TextView

android:id="@+id/textdispjobs"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/text_display_jobs"

android:textSize="40sp"

android:textAlignment="center"/>

<ListView

android:id="@+id/lvshow"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_alignParentStart="true"

android:layout_below="@+id/show" />

</RelativeLayout>

来自其他用户目前它显示的项目也是如此。 如果有人能帮助我,这将是非常有益的。谢谢!

回答:

如果您在用户第一次创建帐户时设置了电子邮件,则只有在Firebase中使用getEmail()函数才会返回电子邮件。要设置自己的电子邮件,你必须这样做:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

user.updateEmail("[email protected]");

如果您想了解更多关于这一点,this is where I got this code from

然后,您可以使用getEmail功能。否则,如果你想从JobDetails类的电子邮件,获得的电子邮件在您的childEventListener:

JobDetails jo = (JobDetails) dataSnapshot.getValue(JobDetails.class); 

//This getEmail function is provided in the JobDetails class

String email = jo.getEmail();

编辑:

既然你是想只得到当前用户已经显示作业/添加,您需要先获取用户的电子邮件。假设你设置用户的基于它们的UID的数据库信息,你可以做这样的事情来获得当前用户:

private User curr_user; 

private String mUserId;

mUserId = FirebaseAuth.getInstance.getUid();

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();

//Replace this path to wherever you stored your users

mDatabase.child("users").child(mUserId).addListenerForSingleValueEvent(new ValueEventListener() {

@Override

public void onDataChange(DataSnapshot dataSnapshot) {

curr_user = dataSnapshot.getValue(User.class);

}

@Override

public void onCancelled(DatabaseError databaseError) {

}

});

现在,你可以通过作业的孩子获得张贴的工作循环当前用户的电子邮件:

firebase.addChildEventListener(new ChildEventListener() { 

@Override

public void onChildAdded(DataSnapshot dataSnapshot, String s) {

// Get the value from the DataSnapshot and add it to the jobs' list

JobDetails jo = (JobDetails) dataSnapshot.getValue(JobDetails.class);

String joString = String.valueOf(jo);

if (jo.getEmail() == curr_user.getEmail()) {

arrayAdapter.add(joString);

}

// Notify the ArrayAdapter that there was a change

arrayAdapter.notifyDataSetChanged();

}

@Override

public void onChildChanged(DataSnapshot dataSnapshot, String s) {

}

@Override

public void onChildRemoved(DataSnapshot dataSnapshot) {

}

@Override

public void onChildMoved(DataSnapshot dataSnapshot, String s) {

}

@Override

public void onCancelled(FirebaseError databaseError) {

}

});

以上是 如何在firebase中以列表视图显示数据(包含与用户电子邮件相同的电子邮件的区块) 的全部内容, 来源链接: utcz.com/qa/261797.html

回到顶部