当前位置: 首页 > 知识库问答 >
问题:

Android Studio onClickListener中的onClickListener尝试在空对象引用上调用虚拟方法

龚迪
2023-03-14

所以我有一个简单的应用程序,有一个按钮和一个文本视图,当按钮被点击(错误是应用程序只是崩溃)一个对话框弹出,从对话框弹出,将有一个文本字段和一个按钮。我将在文本字段中输入一个名称,当我单击该按钮时,文本视图(在主activity中)将被设置为我输入的名称(从alertdialog中)。

mainactivity.java


import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    AlertDialog.Builder dialogBuilder;
    AlertDialog dialog;
    EditText txt;
    TextView title;
    Button btn, btn2;

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

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

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showPopup();
            }
        });
    }

    public void showPopup(){
        dialogBuilder = new AlertDialog.Builder(this);
        View popup = getLayoutInflater().inflate(R.layout.popup_tab, null);
        btn2 = (Button) findViewById(R.id.button2);
        txt = (EditText) findViewById(R.id.idtxt);

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String theTxt = txt.getText().toString();
                title.setText(theTxt);
            }
        });

        dialogBuilder.setView(popup);
        dialog = dialogBuilder.create();
        dialog.show();
    }
}

Logcat中的错误

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at com.example.listenertest.MainActivity.showPopup(MainActivity.java:41)
        at com.example.listenertest.MainActivity$1.onClick(MainActivity.java:30)

共有2个答案

姜智渊
2023-03-14

更改按钮和EditText声明,因为这些视图位于AlertDialog布局中(例如,在您的情况下是弹出)

btn2 = (Button) popup.findViewById(R.id.button2);
txt = (EditText) popup.findViewById(R.id.idtxt);
董建茗
2023-03-14

因为弹出视图属于它,所以您需要更改:

btn2 = (Button) findViewById(R.id.button2);
txt = (EditText) findViewById(R.id.idtxt);

致:

btn2 = (Button) popup.findViewById(R.id.button2);
txt = (EditText) popup.findViewById(R.id.idtxt);
 类似资料: