空指针在非空索引上?

时间:2017-12-29 09:46:08

标签: java android

喜欢主题。我有空指针,怎么可能?

  

java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)'

 public class MainActivity extends AppCompatActivity {
    Button button, button2;
    TextView textView, textView2;
    String abc;
    public List list = new ArrayList<>();
    int size;

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

        list.add("abc");
        abc = (String) list.get(0);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText(abc);
            }
        });

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                  size = list.size();
                textView2.setText(size);
            }
        });
    }
}

5 个答案:

答案 0 :(得分:2)

您忘了在findViewById

OnCreate()对您的控件进行操作
button2 =(Button) findViewById(R.id.button2);
button = (Button) findViewById(R.id.btnID);
textView2 =(textView) findViewById(R.id.textView2);

示例代码

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

    button = (Button) findViewById(R.id.mybtnID);
    button2 = (Button) findViewById(R.id.button2);
    textView2 = (textView) findViewById(R.id.textView2);

    list.add("abc");
    abc = (String) list.get(0);


    button.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick( View view ){
            textView.setText(abc);
        }
    });

    button2.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick( View view ){
            size = list.size();
            textView2.setText(size);
        }
    });
}

答案 1 :(得分:1)

你错过了 所有小部件的findViewById

 Button button, button2;
 TextView textView, textView2;
 button = findViewById(R.id.id_of_button_1); // same for button2,textview,textview2

答案 2 :(得分:0)

对于所有小部件

,请尝试忽略findViewById
button = (Button) findViewById(R.id.btnID);
button2 =(Button) findViewById(R.id.button2);

textView = =(textView) findViewById(R.id.textView);
textView2 =(textView) findViewById(R.id.textView2);

示例代码

public class MainActivity extends AppCompatActivity {

    Button button, button2;
    TextView textView, textView2;
    String abc;
    public List list = new ArrayList<>();
    int size;

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


        button = (Button) findViewById(R.id.btnID);
        button2 =(Button) findViewById(R.id.button2);

        textView = =(textView) findViewById(R.id.textView);
        textView2 =(textView) findViewById(R.id.textView2);

        list.add("abc");
        abc = (String) list.get(0);


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText(abc);
            }
        });

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                  size = list.size();
                textView2.setText(size);
            }
        });

    }


}

答案 3 :(得分:0)

您可以像所有人所说的那样使用findById(R.id.myBtn)进行初始化。或者以编程方式button = new Button(this);

答案 4 :(得分:0)

试试这个

您忘了添加findViewById

public class MainActivity extends AppCompatActivity {

    Button button, button2;
    TextView textView, textView2;
    String abc;
    public List list = new ArrayList<>();
    int size;

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

        button=(Button)findViewById(R.id.button); 
        button2=(Button)findViewById(R.id.button2); 

        list.add("abc");
        abc = (String) list.get(0);


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText(abc);
            }
        });

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                  size = list.size();
                textView2.setText(size);
            }
        });

    }


}