Android 在运行时从视图类设置布局时获取NullPointerexception

Android 在运行时从视图类设置布局时获取NullPointerexception,android,view,nullpointerexception,Android,View,Nullpointerexception,我在视图类中设置布局时获得了NullPointerException。 我想在运行时访问类的视图。我已经为ex.TableView类编写了代码。在这个类中,我设置了每个控件的所有getter和setter。 但我面临的问题是,当我运行活动时,我在按钮控件的findViewById()中得到空指针异常 有人能帮我摆脱困境吗? 提前谢谢 这是我的XML表格活动的布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk

我在视图类中设置布局时获得了
NullPointerException
。 我想在运行时访问类的视图。我已经为ex.
TableView
类编写了代码。在这个类中,我设置了每个控件的所有getter和setter。 但我面临的问题是,当我运行活动时,我在
按钮
控件的
findViewById()
中得到空指针异常

有人能帮我摆脱困境吗? 提前谢谢

这是我的
XML
表格活动的布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".TableView" >

    <TextView
        android:id="@+id/txtTableNo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="67dp"
        android:text="Table No"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/edTableNo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/txtTableNo"
        android:layout_alignParentRight="true"
        android:ems="10"
        android:inputType="number" />

    <Button
        android:id="@+id/btnSaveTableMaster"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edTableNo"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="76dp"
        android:text="Save" />

    <Button
        android:id="@+id/btnUploadTableData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/btnSaveTableMaster"
        android:layout_below="@+id/btnSaveTableMaster"
        android:layout_marginTop="56dp"
        android:text="Upload" />

</RelativeLayout>
package com.bis.restaurant.kot.view;

import com.bis.restaurant.kot.R;

import android.app.ActionBar.LayoutParams;
import android.content.Context;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class TableView extends View{

    EditText edTableNo;
    Button btnSaveTableMaster,btnUploadTableData;
    Context con;
    public TableView(Context context) {
        super(context);
        this.con = context;
        findViewById(R.layout.activity_table_view);
        setEdTableNo(new EditText(con));
        setBtnSaveTableMaster((Button)findViewById(R.id.btnSaveTableMaster));
        setBtnUploadTableData((Button)findViewById(R.id.btnUploadTableData));
    }
    public EditText getEdTableNo() {
        return edTableNo;
    }
    public Button getBtnSaveTableMaster() {
        return btnSaveTableMaster;
    }
    public Button getBtnUploadTableData() {
        return btnUploadTableData;
    }
    public void setEdTableNo(EditText edTableNo) {
        this.edTableNo = edTableNo;
        //edTableNo.setWidth(LayoutParams.WRAP_CONTENT);
    }
    public void setBtnSaveTableMaster(Button btnSaveTableMaster) {
        this.btnSaveTableMaster = btnSaveTableMaster;
    }
    public void setBtnUploadTableData(Button btnUploadTableData) {
        this.btnUploadTableData = btnUploadTableData;
    }
}
下面的文件是使用视图的
表格活动

public class TableActivity extends Activity {

    /*EditText edTableNo;
    Button btnSaveTableMaster,btnUploadTableData;
    */String fileName;
    Date dt=new Date();
    Context con=this;
    ArrayList<String> csvHeaders;
    FileChooser filepath;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    final TableView tableView = new TableView(con);
    setContentView(tableView);
        /*edTableNo=(EditText)findViewById(R.id.edTableNo);
        btnSaveTableMaster=(Button)findViewById(R.id.btnSaveTableMaster);
        btnUploadTableData=(Button)findViewById(R.id.btnUploadTableData);
        */

    tableView.getBtnSaveTableMaster().setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(tableView.getEdTableNo()!=null && tableView.getEdTableNo().getText().toString().trim().length()>0 ){
                    TableMaster tableMaster=new TableMaster();
                    tableMaster.setCurTableDate(dt);
                    tableMaster.setTableNo(tableView.getEdTableNo().getText().toString());

                    TableDao tableDao=new TableDao(con);
                    Boolean flag=tableDao.addTableViewData(tableMaster);

                    if(flag){
                        Toast.makeText(con, "Data Saved Successfully.", Toast.LENGTH_LONG).show();
                    }

                    Intent i=new Intent(getApplicationContext(),WaiterActivity.class);

                    startActivity(i);
                    finish();
                }
            }
        });
公共类TableActivity扩展活动{
/*编辑文本edTableNo;
按钮btnSaveTableMaster,btnUploadTableData;
*/字符串文件名;
日期dt=新日期();
上下文con=这个;
ArrayList csvHeaders;
文件选择器文件路径;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
最终TableView TableView=新TableView(con);
setContentView(tableView);
/*edTableNo=(EditText)findViewById(R.id.edTableNo);
btnSaveTableMaster=(按钮)findViewById(R.id.btnSaveTableMaster);
btnUploadTableData=(按钮)findViewById(R.id.btnUploadTableData);
*/
tableView.getBtnSaveTableMaster().setOnClickListener(新的OnClickListener()){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
if(tableView.getEdTableNo()!=null&&tableView.getEdTableNo().getText().toString().trim().length()>0){
TableMaster TableMaster=新的TableMaster();
tableMaster.setCurTableDate(dt);
tableMaster.setTableNo(tableView.getEdTableNo().getText().toString());
TableDao TableDao=新TableDao(con);
布尔标志=tableDao.addTableViewData(tableMaster);
国际单项体育联合会(旗){
Toast.makeText(con,“数据保存成功”,Toast.LENGTH_LONG.show();
}
Intent i=新的Intent(getApplicationContext(),WaiterActivity.class);
星触觉(i);
完成();
}
}
});
我在下面的一行中得到了
NullPointerException

tableView.getBtnSaveTableMaster().setOnClickListener(新的OnClickListener())

Context con=this;
必须在onCreate中

Context con; 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
con =this;
创建活动后,活动上下文即可用

此外,我看不到在视图构造函数中展开布局的位置,但使用的是
findviewbyd
。初始化将失败,因为没有展开任何布局

在构造函数中

  public TableView(Context context) {
    super(context);
    this.con = context;
    LayoutInfalter mInflater = LayoutInflater.from(context);
    View view = mInflater.inflate(R.layout.yourlayout,null);  
    setEdTableNo(new EditText(con));
    setBtnSaveTableMaster((Button)view.findViewById(R.id.btnSaveTableMaster));
    setBtnUploadTableData((Button)view.findViewById(R.id.btnUploadTableData));
}
使用空上下文)
必须在onCreate()方法之后声明上下文变量

您的
findViewById(R.layout.activity_table_view);
视图
类下找不到视图,这就是它获取
NullPointerException
的原因。请执行以下操作

 public TableView(Context context) {
    super(context);
    LayoutInfalter mInflater = LayoutInflater.from(this.getContext());
    View view = mInflater.inflate(R.layout.yourlayout,null);  
    setBtnSaveTableMaster((Button)view.findViewById(R.id.btnSaveTableMaster));
    setBtnUploadTableData((Button)view.findViewById(R.id.btnUploadTableData));
}

在findViewById(R.id.btnSaveTableMaster)调试程序时仍将获取Null此值为NullPointerException,其Id为Null@user3518789这也解释了为什么在我的帖子里。一定要再读一遍。你不会膨胀版面。所以你的
findViewById
会失败。我如何使用膨胀版面?@user3518789你有没有重新看我的帖子?我已经写了你建议的代码,但我仍然得到了答案e相同的NullPointerException。我已经编写了con=this;is OnCreate(),但它仍然不起作用。如果答案对您有用,那么您可以接受答案。