代码之家  ›  专栏  ›  技术社区  ›  Aiden Nox

Android findViewById空指针[重复]

  •  1
  • Aiden Nox  · 技术社区  · 7 年前

    来自activity\u设置。xml

    <EditText android:id="@+id/editText" android:text="text" />
    <Button android:id="@+id/button" android:text="button"/>
    

    来自MyActivity。Java语言

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        this.findViewById(R.id.button).setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    EditText txt = (EditText) view.findViewById(R.id.editText);
                    Toast.makeText(view.getContext(),txt.getText(), Toast.LENGTH_SHORT).show();
               }
            });
    ...
    

    如果我点击按钮

     java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
    

    只是为了测试,我试了试,成功了

    @Override
    public void onClick(View view) {
        EditText txt = (EditText) view.findViewById(R.id.editText);
        Toast.makeText(view.getContext(),txt.getText(),Toast.LENGTH_SHORT).show();
        }
    }
    

    我不明白为什么按钮可以,但editText为空。

    2 回复  |  直到 7 年前
        1
  •  2
  •   laalto    7 年前

    你在打电话 findViewById() view 点击了。您的按钮没有将edittext作为其子级。您应该查询活动视图层次结构:替换

    view.findViewById(R.id.editText)
    

    具有

    findViewById(R.id.editText)
    
        2
  •  1
  •   user8421421 user8421421    7 年前

    改变

    EditText txt = (EditText) view.findViewById(R.id.editText);
    

    EditText txt = (EditText)findViewById(R.id.editText);
    

    您正在单击的视图中查找EditText控件,这显然就是按钮。您必须搜索活动的布局文件。