Java 获取edittext字段并在TextView中显示

Java 获取edittext字段并在TextView中显示,java,android,android-edittext,textview,illegalstateexception,Java,Android,Android Edittext,Textview,Illegalstateexception,我对编码比较陌生,但对Java和Android有一些经验。我有一个非常基本的问题,我已经做了一次又一次,但出于某种原因,这种情况不起作用 我有一个由用户填充的edittext字段。当按下enter按钮时,应用程序会将其作为字符串保存。然后,该字符串用于使用用户输入填充TextView 我已经创建了findviewbyids,我已经将字符串设置为等于edittext输入,然后根据下面的代码将文本视图中的文本设置为字符串。我已经检查了以前的应用程序,我已经做了,这一直是工作之前 package co

我对编码比较陌生,但对Java和Android有一些经验。我有一个非常基本的问题,我已经做了一次又一次,但出于某种原因,这种情况不起作用

我有一个由用户填充的
edittext
字段。当按下enter按钮时,应用程序会将其作为字符串保存。然后,该字符串用于使用用户输入填充
TextView

我已经创建了
findviewbyids
,我已经将字符串设置为等于
edittext
输入,然后根据下面的代码将文本视图中的文本设置为字符串。我已经检查了以前的应用程序,我已经做了,这一直是工作之前

package com.example.android.golfhandicap;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

EditText playerName;
TextView playerOneName;
String name;
int handicap;
EditText playerHandicap;
TextView playerOneHcp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.front_page);

}
//set view by IDs
public void views() {
    playerName = findViewById(R.id.inputPlayerName);
    playerOneName = findViewById(R.id.playerOneName);
    playerHandicap = findViewById(R.id.inputPlayerHcp);
    playerOneHcp = findViewById(R.id.playerOneHcp);

}

/**
 * Add the codes for the button to navigate around the app
 */


public void enterScore1(View view) {
setContentView(R.layout.front_page);
}

public void addPlayer(View view) {
    setContentView(R.layout.new_player);
}

public void addScore(View view) {
    setContentView(R.layout.input_page);
}


public void enterPlayer(View view) {

    views();


    name = playerName.getText().toString();
//handicap = Integer.parseInt(playerHandicap.getText().toString());



playerOneName.setText(name);
//playerOneHcp.setText(handicap);



    Toast.makeText(this, "player name is " + name + " and handicap is 
" + handicap , Toast.LENGTH_SHORT).show();
    setContentView(R.layout.front_page);



}
}
包含文本视图的页面的XML我想在以下位置显示
字符串


使用
edittext
获取用户输入的布局的XML:


如果我注释掉行
p1Name.setText(name)然后它就可以正常工作了,我干杯来检查名字是否被接受,名字是否被设置为输入。因此,
p1Name
似乎有问题。我已经检查并三次检查了所有ID是否正确

我已经花了一个多小时试图弄明白这一点,但我看不出我做错了什么

这是我在logcat上看到的行(这些都是红色显示的行)


任何帮助都将得到感激。

问题仅仅是因为以下原因:

  • 您尚未使用
    findViewById
    绑定视图。这是因为以下代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.front_page);
    
        // Here you haven't bind the view.
    }
    
  • 您应该使用
    views()
    方法直接绑定视图。因此,将代码更改为:

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.front_page);
    
            // bind the view.
            views();
        }
    
  • 每次使用此方法单击按钮时,您都会更改布局视图:

    public void addScore(View view) {
        setContentView(R.layout.input_page);
    }
    
  • 这将成为你问题的根源之一。首先,不建议这样做,因为你是。其次,您需要确保所有布局
    onClick
    都在代码中实现

  • 最后但并非最不重要的一点,您最好在代码中使用
    setOnClickListener
    ,而不是在布局中使用
    onClick
    属性。这是因为您应该将逻辑和UI分开

  • logcat中有错误吗?请为id
    playername
    发布xml标记,我在查看Logcat时似乎遇到了两个错误(以前从未使用过它,所以不确定这些是否有用,第一个错误是InvocationTargetException第二个错误是nullpointerexception。这是PlayerName文本视图的xml。我对android studio还是新手,我刚开始一个java模块作为我学位的一部分。我的日志包含大量信息,上面的两个错误是我认为问题是。但我还没有对logcat错误进行任何研究。非常感谢你的回答。我已经将FindViewbtID更改为onCreate方法,但没有太大帮助。你提到的其他一些事情我不熟悉。我在另一个应用程序中使用了onClickListener,但主要是复制的om在线解决方案。我需要阅读如何正确操作。长话短说,你只需要设置布局并将布局上的视图绑定到代码上,然后按钮
    onClick
    就可以工作。你遇到问题只是因为你还不熟悉安卓代码的工作原理。花点时间深入了解一下;)
    public void addScore(View view) {
        setContentView(R.layout.input_page);
    }