在运行时从View类设置布局时获取NullPointerexception

时间:2014-04-11 06:03:41

标签: android view nullpointerexception

我从View类设置NullPointerException时收到layout。 我想在运行时访问类的视图。我已经为ex编写了代码。 TableView课程。在本课程中,我设置了每个控件的所有getter和setter。 但是我遇到的问题是当我运行活动时,我在findViewById()控件的Button中得到了空指针异常。

任何人都可以帮我摆脱它吗? 提前谢谢。

这是XML的{​​{1}}布局文件:

TableActivity

以下文件属于<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> 的视图类:

TableActivity

以下文件是使用View的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; } } 。:

TableActivity

我在下一行收到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(); } } });

NullPointerException

3 个答案:

答案 0 :(得分:0)

Context con=this;

必须在onCreate

Context con; 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
con =this;

一旦创建了活动,就可以使用活动上下文。

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

在构造函数

  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));
}

答案 1 :(得分:0)

使用null Context)
你必须在onCreate()方法之后声明上下文变量

答案 2 :(得分:0)

您的findViewById(R.layout.activity_table_view);无法在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)); } 做类似下面的事情

{{1}}