java - MainActivity中的java.lang.NullPointerException setOnClickListener showdialog

标签 java android error-handling nullpointerexception dialog

运行我的应用程序时,我收到一个NullPointerException,所以我不知道这是怎么回事。

我的MainActivity.java:

package com.example.ahmad.tapleviewmy;
import android.app.Activity;
import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.ahmad.tapleviewmy.DB.Adapter;
import com.example.ahmad.tapleviewmy.myItem.Item;
import de.codecrafters.tableview.TableView;
import de.codecrafters.tableview.listeners.TableDataClickListener;
import de.codecrafters.tableview.toolkit.SimpleTableDataAdapter;
import de.codecrafters.tableview.toolkit.SimpleTableHeaderAdapter;

public class MainActivity extends Activity{
private EditText nameEditText,propeliantEditText,destEditText;
private Button SaveBtn,ShowDialog;
private TableView <String[]> tb;
private TableHelper tapleHelper;

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

    //TABLE VIEW
    tapleHelper=new TableHelper(this);
    tb=(TableView<String[]>)findViewById(R.id.tableview);
    tb.setColumnCount(3);
    tb.setHeaderBackgroundColor(Color.parseColor("#2ecc71"));
    tb.setHeaderAdapter(new SimpleTableHeaderAdapter(this,tapleHelper.getItemProbeHeaders()));
    tb.setDataAdapter(new SimpleTableDataAdapter(this,tapleHelper.getItemProbe()));

    ShowDialog = (Button) findViewById(R.id.ShowDialogBtn);
    ShowDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            displayDialog();
        }
    });

    //TABLE CLICK
    tb.addDataClickListener(new TableDataClickListener<String[]>() {
        @Override
        public void onDataClicked(int rowIndex, String[] clickedData) {
            Toast.makeText(MainActivity.this,((String[])clickedData)[1],Toast.LENGTH_SHORT).show();
        }
    });


}


//DISPLAY INPUT DIALOG
private void displayDialog(){
    try {
        Dialog d = new Dialog(this);
        d.setTitle("SQLITE DATA");
        d.setContentView(R.layout.dialog_layout);
        SaveBtn = (Button) findViewById(R.id.saveBtn);
        SaveBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //INITIALIZE VIEWS
                nameEditText = (EditText) findViewById(R.id.nameEditText);
                propeliantEditText = (EditText) findViewById(R.id.propEditText);
                destEditText = (EditText) findViewById(R.id.destEditText);

                Item i = new Item();
                i.setName(nameEditText.getText().toString());
                i.setPropeliant(propeliantEditText.getText().toString());
                i.setDestination(destEditText.getText().toString());


                if (new Adapter(MainActivity.this).saveItem(i)) {
                    nameEditText.setText("");
                    propeliantEditText.setText("");
                    destEditText.setText("");
                    tb.setDataAdapter(new SimpleTableDataAdapter(MainActivity.this, tapleHelper.getItemProbe()));
                } else {
                    Toast.makeText(MainActivity.this, "Not Saved", Toast.LENGTH_SHORT).show();
                }
            }

        });
        //SHOW DIALOG
        d.show();
    }
    catch (NullPointerException e){
        e.printStackTrace();
    }
}
}

这是我尝试打开对话框时的调试日志:
java.lang.NullPointerException
W/System.err:at   com.example.ahmad.tapleviewmy.MainActivity.displayDialog(MainActivity.java:67)
W/System.err:     at     com.example.ahmad.tapleviewmy.MainActivity.access$000(MainActivity.java:19)
W/System.err:     at     com.example.ahmad.tapleviewmy.MainActivity$1.onClick(MainActivity.java:44)
W/System.err:     at android.view.View.performClick(View.java:4438)
W/System.err:     at android.view.View$PerformClick.run(View.java:18422)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:733)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:136)
W/System.err:     at a     android.app.ActivityThread.main(ActivityThread.java:5001)
W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err:     at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err:     at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
W/System.err:     at     com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
W/System.err:     at dalvik.system.NativeStart.main(Native Method)

最佳答案

似乎它找不到您的按钮,在调用ShowDialog = (Button) findViewById(R.id.ShowDialogBtn)时可能会仔细检查ID的匹配情况。

如果您查看findViewById的文档,它说如果找不到 View ,则返回null

附带说明一下,变量名称应以小写字母开头,例如firstName,orderNumber等。请参阅:
http://www.javatpoint.com/java-naming-conventions

关于java - MainActivity中的java.lang.NullPointerException setOnClickListener showdialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41420417/

相关文章:

java - 相对路径 FileNotFoundException

java - Android - 在 fragment 中使用连接管理器

java - 为什么 string.intern() 这么慢?

java - 如何在绑定(bind) fragment 上实现拉动刷新?

java - 使用 XJC 的 Java 类的 XML 模式

android - 我如何以编程方式引用/values/strings.xml 文件中的内容?

java - 在 Sqlite Android 应用程序中的多个表中插入内容值

error-handling - STM32 UART错误未清除标志

php - 根据PHP中的报告级别触发错误的函数

php - 无法抑制 php v5.3 中已弃用的警告