Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Kotlin:TextView.text未按预期工作_Java_Android_Android Studio_Kotlin_Textview - Fatal编程技术网

Java Android Kotlin:TextView.text未按预期工作

Java Android Kotlin:TextView.text未按预期工作,java,android,android-studio,kotlin,textview,Java,Android,Android Studio,Kotlin,Textview,我有一个应用程序,可以让用户在尚未登录的情况下使用Firebase登录。如果用户登录其用户配置文件信息显示正确。关闭应用程序并重新打开后,用户名和电子邮件不会设置并转到我的默认文本。但如果我退出并重新登录,它就会显示出来。我觉得这和更新用户界面有关,但还是卡住了 如果需要,我可以在午餐休息结束后发布代码 用代码更新 这是MainActivity中的相关代码。在这里,我检查用户是否已登录,如果已登录,则允许他们从此处登录,如果不启动登录活动 class MainActivity : AppComp

我有一个应用程序,可以让用户在尚未登录的情况下使用Firebase登录。如果用户登录其用户配置文件信息显示正确。关闭应用程序并重新打开后,用户名和电子邮件不会设置并转到我的默认文本。但如果我退出并重新登录,它就会显示出来。我觉得这和更新用户界面有关,但还是卡住了

如果需要,我可以在午餐休息结束后发布代码

用代码更新

这是MainActivity中的相关代码。在这里,我检查用户是否已登录,如果已登录,则允许他们从此处登录,如果不启动登录活动

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

val TAG = "MainActivity"

var mAuth: FirebaseAuth? = null
var mUser: FirebaseUser? = null
var userEmailTV: TextView? = null
var userDispNameTV: TextView? = null
val RC_SIGN_IN = 123

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)

    val toggle = ActionBarDrawerToggle(
            this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
    drawer_layout.addDrawerListener(toggle)
    toggle.syncState()
    nav_view.setNavigationItemSelectedListener(this)

}

 override fun onStart() {
    super.onStart()

    mAuth = FirebaseAuth.getInstance()
    mUser = mAuth?.currentUser

    if (mUser != null) {

        userEmailTV = findViewById<View>(R.id.userEmail) as TextView?
        userEmailTV?.text = mUser?.email
        userDispNameTV = findViewById<View>(R.id.userName) as TextView?
        userDispNameTV?.text = mUser?.displayName

        Log.i(TAG, "User Display Name : ${mUser?.displayName}")
        Log.i(TAG, "Users Email :  ${mUser?.email}")

    } else {
        startActivityForResult(
                // Get an instance of AuthUI based on the default app
                AuthUI.getInstance().createSignInIntentBuilder().build(),
                RC_SIGN_IN)
    }


}
class MainActivity:AppCompatActivity(),NavigationView.OnNavigationItemSelectedListener{
val TAG=“main活动”
var mAuth:FirebaseAuth?=null
var mUser:FirebaseUser?=null
var userEmailTV:TextView?=null
var userDispNameTV:TextView?=null
val RC_SIGN_IN=123
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
设置支持操作栏(工具栏)
val toggle=ActionBarDrawerToggle(
这,抽屉布局,工具栏,R.string.navigation\u抽屉打开,R.string.navigation\u抽屉关闭)
抽屉布局。添加抽屉链接(切换)
toggle.syncState()
nav_view.setNavigationItemSelectedListener(此)
}
覆盖有趣的onStart(){
super.onStart()
mAuth=FirebaseAuth.getInstance()
mUser=mAuth?.currentUser
if(mUser!=null){
userEmailTV=findViewById(R.id.userEmail)作为文本视图?
userEmailTV?.text=mUser?.email
userDispNameTV=findviewbyd(R.id.userName)作为文本视图?
userDispNameTV?.text=mUser?.displayName
Log.i(标记,“用户显示名称:${mUser?.displayName}”)
Log.i(标记,“用户电子邮件:${mUser?.Email}”)
}否则{
startActivityForResult(
//获取基于默认应用程序的AuthUI实例
AuthUI.getInstance().CreateSignInEntBuilder().build(),
RC_登录)
}
}
这是在导航抽屉中保存用户配置文件信息的布局信息

 <TextView
    android:id="@+id/userName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/nav_header_vertical_spacing"
    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
    android:text="Username"/>

<TextView
    android:id="@+id/userEmail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="youremail@something.com"/>

经过多次尝试和错误研究后,我的理论是…..这个问题不是因为TextView被初始化在上面评论中其他人认为的错误位置,而是因为导航标题视图没有时间膨胀。我将编写初始化导航标题的编码,然后是TextView和ed这是有结果的

编辑

以下是我所做的工作,让它发挥作用。 我补充说

uemail=findviewbyd(R.id.nav_视图)作为导航视图
navHead=uemail.getHeaderView(0)
tvEmail=navHead.findviewbyd(R.id.userEmail)作为文本视图
tvDisplayName=navHead.findViewById(R.id.userName)作为文本视图
tvEmail.text=mUser?.email
tvDisplayName.text=mUser?.displayName

我把它放在一个我在onCreate和onStart中调用的函数中。如果我不这样做,它只会在登录或根本不登录后进行填充。这样,它会一直填充正确的数据。我发现这与Android Studio在23.1或类似版本之后对导航视图使用recyclerview有关。

a你确定“findView”成功?尝试在导航标题视图接收器上调用它

请发布代码。K就像我说的那样,我可以在午餐后发布。但在那之前,你知道为什么在logcat中它会显示正确的信息,但除非用户在打开应用程序后登录,否则它不会显示在ui上吗?我觉得如果它在loggcat中显示,它应该显示在UIT上。这一定是我所需要的n正在更改值的代码。因此,请发布代码。我将查看它。我已使用相关代码更新了post。如果我缺少某些内容,请告诉我并添加它。为什么要在onStart方法中启动视图?它们应该在onCreate方法中。在onStart中,您只需从中查找值。看起来像错误的理论。膨胀作用于主线程以及活动回调,因此onStart不可能在onCreate完成之前执行。我在onCreate和onStart中初始化了TextView,但仍然收到一个错误,指出TextView不能为null。即使我设置了一个值(logcat证明了这一点)到TextView。最新的错误并不是说TextView不能设置为null,只是TextView为null。这让我想到,由于我正在启动TextView,而不是特定的导航标头,它正在尝试在加载之前设置文本。这也解释了为什么TextView仅在执行sta后显示正确的信息rtactivityforresult登录。一旦有机会膨胀视图并返回
        uemail = findViewById<View>(R.id.nav_view) as NavigationView
    navHead = uemail.getHeaderView(0)
    tvEmail = navHead.findViewById(R.id.userEmail) as TextView
    tvDisplayName = navHead.findViewById(R.id.userName) as TextView
    tvEmail.text = mUser?.email
    tvDisplayName.text = mUser?.displayName