Java “如何修复”;“非静态vs静态”;在onCreate()中作为输入接收器发出

Java “如何修复”;“非静态vs静态”;在onCreate()中作为输入接收器发出,java,android,Java,Android,因此,我制作了一个简单的应用程序,目前有一个EditText输入和一个按钮,onClick,将用户带到指定的网站+最后的用户输入 但是,我的EditText输入似乎没有与我声明的字符串“连接”,因此没有检测到输入值,当按下按钮时,用户直接进入默认网站 我尝试过以下代码: rns = et.getText().toString(); 其中,“et”是EditText输入的声明名称,“rns”是读取输入的字符串的声明名称 public class MainActivity extends AppC

因此,我制作了一个简单的应用程序,目前有一个EditText输入和一个按钮,onClick,将用户带到指定的网站+最后的用户输入

但是,我的EditText输入似乎没有与我声明的字符串“连接”,因此没有检测到输入值,当按下按钮时,用户直接进入默认网站

我尝试过以下代码:

rns = et.getText().toString();
其中,“et”是EditText输入的声明名称,“rns”是读取输入的字符串的声明名称

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    EditText et;
    String rns; /* Declarations here */
    Button b;

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

        et = (EditText) findViewById(R.id.regNum); /* regNum is android id */
        rns = EditText.getText().toString(); /* This is the line in question, 
with a red underscore on "getText() due to being referenced from a static context */
        b = (Button) findViewById(R.id.regBut); /* regBut is android id */
        b.setOnClickListener(MainActivity.this);
    }

    public void onClick(View v){
        if (v == b){
            Intent browserIntent = new Intent(Intent.ACTION_VIEW,Uri.parse
("https://www.vegvesen.no/kjoretoy/Kjop+og+salg/Kjøretøyopplysninger?
registreringsnummer=" + rns));
            startActivity(browserIntent);
        }
    }
我期望EditText输入字段“et”(id=regNum)检测用户输入,但它根本没有检测到。我没有考虑到的一件事是它没有检测到数字,但我检查了一下,它也没有单独检测到字母

(测试结果均符合上述代码:

rns = et.getText().toString();

)通过
et=(EditText)findViewById(R.id.regNum)检索EditText
,因此您应该使用刚才声明的
et
变量检索它:

et.getText().toString()

您直接从类名(而不是对象的实例)访问该方法,并从中调用getText(),在我的记忆中,它不是一个静态方法

您还尝试过在onClick回调中检查视图id吗?在这种情况下,v==b并不总是正确的

试一试


您还可以查看JakeWharton的将视图从xml注入代码的文章。因此,您不必执行
findViewById()
,您可以将
@OnClick
注释到各自的方法中。

您的代码应该是:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    EditText et;
    String rns; /* Declarations here */
    Button b;

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

        et = (EditText) findViewById(R.id.regNum); /* regNum is android id */

        b = (Button) findViewById(R.id.regBut); /* regBut is android id */
        b.setOnClickListener(MainActivity.this);
    }

    public void onClick(View v){
        if (v == b){
            /* Get the string from the edittext on button press */
            rns = et.getText().toString();
            Intent browserIntent = new Intent(Intent.ACTION_VIEW,Uri.parse
("https://www.vegvesen.no/kjoretoy/Kjop+og+salg/Kjøretøyopplysninger?registreringsnummer=" + rns));
           startActivity(browserIntent);
        }
    }

为什么希望在
onCreate
中有用户输入?确定在这个阶段屏幕还没有显示吗?您的问题和问题标题没有显示match@ScaryWombat我认为以下代码注册了输入:«rns=EditText.getText().toString();»因为字符串和EditText以某种方式连接。我是这方面的初学者,甚至连基本的代码都很难理解,所以我希望能有一个基于标题问题的解释,但我文章主体中的问题本身最终只是解释和偏离了问题,对此我深表歉意。您为什么这么认为?仍然试图访问onCreate中的值似乎是错误的,就像一个符咒。谢谢
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    EditText et;
    String rns; /* Declarations here */
    Button b;

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

        et = (EditText) findViewById(R.id.regNum); /* regNum is android id */

        b = (Button) findViewById(R.id.regBut); /* regBut is android id */
        b.setOnClickListener(MainActivity.this);
    }

    public void onClick(View v){
        if (v == b){
            /* Get the string from the edittext on button press */
            rns = et.getText().toString();
            Intent browserIntent = new Intent(Intent.ACTION_VIEW,Uri.parse
("https://www.vegvesen.no/kjoretoy/Kjop+og+salg/Kjøretøyopplysninger?registreringsnummer=" + rns));
           startActivity(browserIntent);
        }
    }