我正试图从数据库中获取一个用户名,并将其设置为屏幕上的文本。我有3个活动和片段对象。
第一个活动是RegisterActivity
。在用户插入他的电子邮件和密码,并单击next按钮后,将弹出一个包含用户详细信息输入字段的窗口。
用户应该填写所有字段并单击保存按钮。对于保存按钮的onclick
操作,所有用户详细信息都被写入实时数据库。
在main活动中,我希望显示来自数据库的用户名。在调试模式下,我获取用户名,但它不会显示在TextView
(private TextView mwelcometext
)上。
以下是我所做的:
package com.enjoyapp.weddapp.Activities;
public class MainActivity extends AppCompatActivity {
private TextView mWelcomeText;
private String mGreetings;
private String mDisplayName;
private FirebaseAuth mAuth;
private FirebaseDatabase db;
private DatabaseReference users;
private MethodManager mm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
db = FirebaseDatabase.getInstance();
users = db.getReference("Users");
mWelcomeText = findViewById(R.id.mWelcomeText);
bottomNavigationView = findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(navListener);
getDataFromUsersDetails();
mWelcomeText.setText(mDisplayName);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment())
.commit();
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Fragment selectedFragment = null;
switch (menuItem.getItemId()) {
case R.id.nav_home:
selectedFragment = new HomeFragment();
break;
case R.id.nav_favorites:
selectedFragment = new FavoritesFragment();
break;
case R.id.nav_search:
selectedFragment = new SearchFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, selectedFragment)
.commit();
return true;
}
};
public void getDataFromUsersDetails() {
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
mDisplayName = ds.child(mAuth.getCurrentUser().getUid()).child("mEventOwnerName").getValue(String.class);
Log.d("Database reader", mDisplayName);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
users.addListenerForSingleValueEvent(eventListener);
}
public String getGreetings() {
mm = new MethodManager();
if (mm.getTime() >= 6 && mm.getTime() < 12) {
return "Good morning";
} else if (mm.getTime() >= 12 && mm.getTime() < 18) {
return "Good afternoon";
} else if (mm.getTime() >= 18 && mm.getTime() < 22) {
return "Good evening";
} else if (mm.getTime() >= 22 && mm.getTime() < 6) {
return "Good night";
}
return null;
}
}
我希望文本显示在屏幕上private TextView mwelcometext
的字段中。
在layout_main
中,我可以使用工具看到文本视图:text=“something”;
但是当我在实际设备或模拟器上运行它时,只会出现一个空位置。更新:
public void getDataFromUsersDetails() {
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
mDisplayName = ds.child(mAuth.getCurrentUser().getUid()).child("mEventOwnerName").getValue(String.class);
Log.d("Database reader", mDisplayName);
user = new User();
user.setmDisplayName(mDisplayName);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
users.addListenerForSingleValueEvent(eventListener);
}
mWelcomeText=findViewById(r.id.mWelcomeText);
mWelcomeText.setText(user.setGreetingsOnTop());
public String setGreetingsOnTop(){
MethodManager mm = new MethodManager();
String greetings = null;
if (mm.getTime() >= 6 && mm.getTime() < 12) {
greetings = "Good morning";
} else if (mm.getTime() >= 12 && mm.getTime() < 18) {
greetings = "Good afternoon";
} else if (mm.getTime() >= 18 && mm.getTime() < 22) {
greetings = "Good evening";
} else if (mm.getTime() >= 22 && mm.getTime() < 6) {
greetings = "Good night";
}
return getmDisplayName() +""+greetings;
}
我想请你看看这两条线的主要活动。
getDataFromUsersDetails();
mWelcomeText.setText(mDisplayName); //mDisplayName is null initially
getDataFromUsersDetails正在使用ValueEventListener进行异步调用。当响应出现时,您将值赋给mDisplayName,但它不会在TextView中更新。
在For循环中,您需要显式更新Mwelcometext.settext(mDisplayName);
最近,我一直在构建一个应用程序,在JFrame上绘制图像,一切都很好,但是当窗口离开屏幕时,已经绘制的图像消失了,我一直在想是否有办法避免这种情况?谢谢 导入java。awt。;导入java。awt。事件 公共类Pokemoneur扩展了JFrame,实现了AdjustmentListener、ActionListener、MouseListener和Runnable{ }问题是,当用户在屏幕上画
主要内容:【脑筋急转弯】%ds输出什么,【拓展】如何在字符串中书写长文本在《 第一个C语言程序》一节中,我们使用 puts 来输出字符串。puts 是 output string 的缩写,只能用来输出字符串,不能输出整数、小数、字符等,我们需要用另外一个函数,那就是 printf。 printf 比 puts 更加强大,不仅可以输出字符串,还可以输出整数、小数、单个字符等,并且输出格式也可以自己定义,例如: 以十进制、八进制、十六进制形式输出; 要求输出的数字占 n
相关问题: 在Flutter中在小部件之间传递数据的最佳方式 在小部件之间抖动传递数据? 颤振/如何在StateFulWidget之间传递和获取数据
我试图移动这个图像: 在我的PyGame屏幕上,从右到左再向后,但是随着图像的移动,每隔一秒左右我就会有一点屏幕撕裂,就像这样: 我使用的代码是类似于此的循环: 到目前为止,我已经尝试了以下方法来解决这个问题: 在创建屏幕时使用,,标志,这没有效果,我也调整了更新为(因为使用?)时建议使用此选项) 在GPU和CPU之间拆分内存(我在raspberry pi 2上运行此功能)我尝试过为这两个处理器提
我在控制台中不断得到的错误是: core.js:6241 ERROR firebaseerror:不能使用空路径调用函数collectionreference.doc()。 我的firestore设计: 集合名称“用户”->包含每个用户的文档->每个用户都有“联系人”集合->每个联系人包含电子邮件、姓名、电话联系人属性。