【发布时间】:2018-08-03 17:36:59
【问题描述】:
如果有人可以提供帮助,我将不胜感激。我是 firebase 的初学者,这是我在学校的最后一个项目。我已经处理这个问题好几个星期了,我想用它差不多一个月了。请多多包涵。
我的最终项目中有“Auth.GoogleSignInApi”方法。一切都很顺利。我尝试将每个用户的“getUid”存储在 Firebase 数据库中,并为他们制作了一个小结构,例如电话号码、昵称和地址。当用户通过 Google 帐户登录时,我创建了三个名为“个人资料、消息和其他项目”的子项目。
Query query = database_Reference
.orderByChild("Profile/pro_ID")
.equalTo(user.getUid());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) {
Toast.makeText( Activity_Login.this, "Create new username ", Toast.LENGTH_SHORT ).show();
Record_ID_FromServer = database_Reference.child(user.getUid()).getKey();//.push().getKey();
database_Reference.child( Record_ID_FromServer ).child("Profile").setValue( profile_user_ );
database_Reference.child( Record_ID_FromServer ).child("Messages").setValue( profile_user_);
database_Reference.child( Record_ID_FromServer ).child("Other").setValue( profile_user_);
“个人资料项目”有 7 个项目,其中一个有 3 个项目,我将其命名为“t_address”。
有时,用户有第二个电话号码或地址。但是每当我尝试部署“DataSnapshot postSnapshot”时!我无法检索“t_address”的“ListView”。我一直在寻找并关注许多教程,但它们都不起作用。
Firebase 中的结构如下: 1:“Record_ID_FromServer = database_Reference.child(user.getUid()).getKey();”
2: “用户信息地址 s = 新用户信息地址();” "myRef.child(user.getUid()).child("Profile").child("t_address").setValue(s);"
我的问题是如何检索“t_address”并将其显示在 ListView 中?
ListView 的 Java 类:
public class Address_listview extends AppCompatActivity {
private static final String TAG = "Address_listview";
TextView t_add_listview_;
String S_t_add_listview_;
ListView listview;
// ===============================================
private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
String userID;
FirebaseUser user;
// ================================================
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.address_listview );
Objects.requireNonNull( getSupportActionBar() ).setDisplayHomeAsUpEnabled( true );
// ================================================
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
myRef = mFirebaseDatabase.getReference().child( "users" );
user = mAuth.getCurrentUser();
userID = user.getUid();
// ================================================
t_add_listview_ = (TextView) findViewById( R.id.text_address_listview );
S_t_add_listview_ = t_add_listview_.getText().toString();
listview = (ListView) findViewById( R.id.address_listView_list );
// ================================================
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth)
{
FirebaseUser user = firebaseAuth.getCurrentUser();
//If user is not signed in getCurrentUser method returns null
if (user != null) {
Log.d( TAG, "onAuthstateChange:signed:" + user.getUid() );
Log.d( "TAG", "You are signed in Firebase!" );
// User is signed in
// Toast.makeText( MainActivity.this, "FirebaseAuth user if", Toast.LENGTH_SHORT ).show();
//UserTV.setText( user.getEmail().toString() );
t_add_listview_.setText( user.getEmail().toString() );
}
}
};
// ================================================
}
// ================================================
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
// Inflate menu to add items to action bar if it is present.
inflater.inflate(R.menu.menu, menu);
// Associate searchable configuration with the SearchView
// SearchManager searchManager = (SearchManager) getSystemService(Activity_Login.this.SEARCH_SERVICE);
// SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
// searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
if (menu != null) {
menu.findItem(R.id.menu_search).setVisible(false);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intent = new Intent(Address_listview.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
return true;
default:
return super.onOptionsItemSelected( item );
}
}
// ================================================
// ================================================
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
// ================================================
}
和其他类添加城市、地区和邮政编码等内容
// Query query_Address = myRef
// .orderByChild("Profile/pro_ID")
// .equalTo(user.getUid());
myRef.addListenerForSingleValueEvent(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
String get_Address_string1 = myRef.push().getKey();
String postkey = postSnapshot.getRef().getKey();
String get_Address_string = myRef.child(user.getUid()).getKey();
// Database_Reference_Edit_Address.child( postkey ).child( "Profile" ).child( "Address" ).child( get_Address_string ).child( "_UserAddress" ).setValue( S_editText_address );
//Database_Reference_Edit_Address.child(postkey).child("Profile").child("_t_address").child( get_Address_string ).setValue(user_address);
//get data from edittexts
String city = cityEditTxt.getText().toString();
String area = areaEditText.getText().toString();
String zipcode = zipcodeEditText.getText().toString();
//set data to POJO
UserInfoAddres s = new UserInfoAddres();
s.setcity(city);
s.setarea(area);
s.setzipcode(zipcode);
myRef
.child(user.getUid())
//.child( postkey )
.child( "Profile" )
.child( "t_address" )
.child( get_Address_string1 )
.setValue( s );
Toast.makeText( M_MainActivity.this, "added ", Toast.LENGTH_SHORT ).show();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
// =========================================================================================
}
});
还有这个类
public class UserInfoAddres {
private String city, area, zipcode;
public UserInfoAddres() {
}
public UserInfoAddres(String city, String area, String zipcode) {
this.city = city;
this.area = area;
this.zipcode = zipcode;
}
public String getcity() {
return city;
}
public void setcity(String city) {
this.city = city;
}
public String getarea() {
return area;
}
public void setarea(String area) {
this.area = area;
}
public String getzipcode() {
return zipcode;
}
public void setzipcode(String zipcode) {
this.zipcode = zipcode;
}
}
亲切的问候,
【问题讨论】:
标签: android firebase listview firebase-realtime-database