Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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 无法在onClick方法内输出EditText元素的内容_Java_Android - Fatal编程技术网

Java 无法在onClick方法内输出EditText元素的内容

Java 无法在onClick方法内输出EditText元素的内容,java,android,Java,Android,我在androidstudio或Java开发应用程序方面相对较新,最近遇到了一个我无法解决的问题。现在,我所要做的就是在点击按钮后输出编辑文本字段的内容 因为我以后很可能会在活动中添加更多按钮,所以我认为使用一个通用的onClick会更方便,在switch语句中可以分离不同的按钮操作 下面是一个工作示例,其中onClickListener不使用通用的onClick方法: package com.example.user.myapp; import android.app.Activity; i

我在
androidstudio
Java
开发应用程序方面相对较新,最近遇到了一个我无法解决的问题。现在,我所要做的就是在点击
按钮后输出
编辑文本
字段的内容

因为我以后很可能会在
活动中添加更多按钮,所以我认为使用一个通用的
onClick
会更方便,在
switch
语句中可以分离不同的按钮操作

下面是一个工作示例,其中
onClickListener
不使用通用的
onClick
方法:

package com.example.user.myapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    private EditText testText;
    private Button testButton;

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

      // initialize UI elements
      final EditText testText = (EditText) findViewById(R.id.testText);
      testButton = (Button) findViewById(R.id.testButton);

      // set onClick listener 
      testButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
          // it will print the content of testText as long as the "testText" variable is declared as final
          System.out.println(testText.getText().toString().trim());
        }
      });
    }
}
现在,如果我尝试使用通用的
onClick
方法,我会突然收到以下错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.text.Editable android.widget.EditText.getText()”

以下是导致上述错误的代码:

package com.example.user.myapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends Activity implements View.OnClickListener {

    private EditText testText;
    private Button testButton;

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

        // initialize the UI elements
        EditText testText = (EditText) findViewById(R.id.testText);
        Button testButton = (Button) findViewById(R.id.testButton);

        // set onClick Listener
        testButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.testButton:                       
                // this will result in an error                                       
                System.out.println(testText.getText().toString().trim());
                break;
            default:
                break;
    }
}

我在这里缺少什么吗?

在您定义的第二个代码中,您定义了两次
testText

那就行了

包com.example.user.myapp

导入android.app.Activity; 导入android.os.Bundle; 导入android.view.view; 导入android.widget.Button; 导入android.widget.EditText

public class MainActivity extends Activity implements View.OnClickListener {

    private EditText testText;
    private Button testButton;

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

        // initialize the UI elements
        testText = (EditText) findViewById(R.id.testText);
        testButton = (Button) findViewById(R.id.testButton);

        // set onClick Listener
        testButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.testButton:                       
                // this will result in an error                                       
                System.out.println(testText.getText().toString().trim());
                break;
            default:
                break;
    }
}

在第二个代码中,您已经定义了两次
testText

那就行了

包com.example.user.myapp

导入android.app.Activity; 导入android.os.Bundle; 导入android.view.view; 导入android.widget.Button; 导入android.widget.EditText

public class MainActivity extends Activity implements View.OnClickListener {

    private EditText testText;
    private Button testButton;

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

        // initialize the UI elements
        testText = (EditText) findViewById(R.id.testText);
        testButton = (Button) findViewById(R.id.testButton);

        // set onClick Listener
        testButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.testButton:                       
                // this will result in an error                                       
                System.out.println(testText.getText().toString().trim());
                break;
            default:
                break;
    }
}

全局编辑文本:

private EditText testText;
在onCreate()中获取视图:

在onClick中使用它:

System.out.println(testText.getText().toString().trim());

全局编辑文本:

private EditText testText;
在onCreate()中获取视图:

在onClick中使用它:

System.out.println(testText.getText().toString().trim());

您从不初始化
私有EditText testText,因为在以下调用中使用了局部变量,而不是引用类字段:

final EditText testText = (EditText) findViewById(R.id.testText);
onClick(视图v)
是实现
OnClickListener
接口的匿名类方法,该方法引用未初始化的字段变量testText

要解决此问题,请在调用
findViewById()
之前删除变量的类型声明:


您从不初始化
私有EditText testText,因为在以下调用中使用了局部变量,而不是引用类字段:

final EditText testText = (EditText) findViewById(R.id.testText);
onClick(视图v)
是实现
OnClickListener
接口的匿名类方法,该方法引用未初始化的字段变量testText

要解决此问题,请在调用
findViewById()
之前删除变量的类型声明:


您已经声明了EditText 2次,一次是全局性的,另一次是在onCreate方法内,当您在onCreate之外使用EditText时,您得到的是全局变量,它不是初始化的,这就是为什么会出现此错误。用这个,

public class MainActivity extends Activity implements View.OnClickListener {

    private EditText testText;
    private Button testButton;

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

        // initialize the UI elements
        testText = (EditText) findViewById(R.id.testText);
        testButton = (Button) findViewById(R.id.testButton);

        // set onClick Listener
        testButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.testButton:                       
                // this will result in an error                                       
                System.out.println(testText.getText().toString().trim());
                break;
            default:
                break;
    }
} 

您已经声明了EditText 2次,一次是全局性的,另一次是在onCreate方法内,当您在onCreate之外使用EditText时,您得到的是全局变量,它不是初始化的,这就是为什么会出现此错误。用这个,

public class MainActivity extends Activity implements View.OnClickListener {

    private EditText testText;
    private Button testButton;

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

        // initialize the UI elements
        testText = (EditText) findViewById(R.id.testText);
        testButton = (Button) findViewById(R.id.testButton);

        // set onClick Listener
        testButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.testButton:                       
                // this will result in an error                                       
                System.out.println(testText.getText().toString().trim());
                break;
            default:
                break;
    }
} 

共享您的布局?您定义
EditText testText
twice使用全局变量或局部变量共享布局?您定义
EditText testText
twice使用全局变量或局部变量只要可能,我会接受这个答案:)干杯!一旦有可能,我将接受这个答案:)干杯!