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(),但它仍然不起作用。如果答案对您有用,那么您可以接受答案。