0

我想顯示使用他的郵件存儲在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> 

來自其他用戶目前它顯示的項目也是如此。 如果有人能幫助我,這將是非常有益的。謝謝!

+0

我覺得你有很多錯誤,因爲你不能只在不使用//前面註釋的時候去另一行。此外,您的WorkActivity不可讀 – matrix

+0

這些是評論而不是代碼 –

回答

0

如果您在用戶第一次創建帳戶時設置了電子郵件,則只有在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) { 

    } 
}); 
+0

String email = jo.getEmail();它只顯示塊中的電子郵件,我想顯示整個塊的內容 –

+0

那麼在這種情況下,您可能想要創建一個自定義適配器,它在構造函數中接受'jo'對象,然後根據什麼填充'TextView'你要。如果你想創建一個ListView更多的幫助,看看這個鏈接:https://stackoverflow.com/questions/8166497/custom-adapter-for-list-view –

+0

我想顯示的東西顯示從數據庫我的問題是如何檢索/顯示當前用戶存儲的塊。例如在堆棧中,您可以查看您在用戶配置文件中的活動欄中編寫的問題列表! –

相關問題