Android 无法启动活动组件信息:java.lang.NullPointerException
Android 无法启动活动组件信息:java.lang.NullPointerException,android,checkboxlist,Android,Checkboxlist,异常: 无法启动活动组件信息{com.scytec.datamobile.vd.gui.android/com.scytec.datamobile.vd.gui.android.SelectedList}:java.lang.NullPointerException.. 我只想显示复选框列表视图,在每个复选框上显示“checked”,但我不知道为什么这会给我一个例外 public class SelectedList extends Activity implements IObserver{
异常
:
无法启动活动组件信息{com.scytec.datamobile.vd.gui.android/com.scytec.datamobile.vd.gui.android.SelectedList}:java.lang.NullPointerException..
我只想显示复选框列表视图,在每个复选框上显示“checked”,但我不知道为什么这会给我一个例外
public class SelectedList extends Activity implements IObserver{
private ListView machine_listview;
ArrayAdapter<String> adapter;
ArrayList<String> arrayListofMachines;
ArrayList<String> arrayListofMachineNumbers;
Vector<MDCMachineStatus> machineStatus_vector;
Handler handler;
private static int oldPosition = 0;
private Boolean firstClick = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.machinelistview);
machine_listview = (ListView) findViewById(R.id.machine_listview);
machine_listview.setFastScrollEnabled(true);
MachineStatusSingleton.Register(this);
getData();
adapter = new ArrayAdapter<String>(SelectedList.this, R.layout.selectedlist,R.id.text1, arrayListofMachines);
machine_listview.setAdapter(adapter);
machine_listview.setSelection(oldPosition);
CheckBox chk=(CheckBox)findViewById(R.id.check);
chk.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
TextView txt=(TextView)findViewById(R.id.xtra);
if (arg1)
Log.d("", "abul, checked") ;
else
Log.d("", "abul, not checked") ;
}
}
);
machine_listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
oldPosition = position;
MachineStatusSingleton.setMachineNumber(arrayListofMachineNumbers.get(position));
SelectedList.this.finish();
}
});
handler = new Handler(){
public void handleMessage(android.os.Message msg) {
machine_listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
};
};
}
public void Update(ISubject arg0) {
// TODO Auto-generated method stub
}
@Override
public void onDestroy()
{
super.onDestroy();
MachineStatusSingleton.Unregister(this);
}
private void getData(){
machineStatus_vector = MachineStatusSingleton.GetData();
arrayListofMachines = new ArrayList<String>();
arrayListofMachineNumbers = new ArrayList<String>();
for(MDCMachineStatus temp: machineStatus_vector){
arrayListofMachines.add(temp.toString());
arrayListofMachineNumbers.add(temp.getNumber());
}
Collections.sort(arrayListofMachines);
Collections.sort(arrayListofMachineNumbers);
}
private void updateData(){
getData();
handler.sendEmptyMessage(0);
adapter.notifyDataSetChanged();
int index = machine_listview.getFirstVisiblePosition();
View v = machine_listview.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
// ...
// restore
machine_listview.setSelectionFromTop(index, top);
}
}
公共类SelectedList扩展活动实现IObserver{
私有ListView机器\u ListView;
阵列适配器;
ArrayList arrayListofMachines;
ArrayList ArrayListOfMachineEnumbers;
向量机;向量机;
处理者;
私有静态int oldPosition=0;
private Boolean firstClick=true;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.machinelistview);
machine\u listview=(listview)findviewbyd(R.id.machine\u listview);
machine_listview.setFastScrollEnabled(true);
MachineStatusSingleton.寄存器(此);
getData();
adapter=new ArrayAdapter(SelectedList.this,R.layout.SelectedList,R.id.text1,ArrayListFormaches);
machine_listview.setAdapter(适配器);
机器列表视图。设置选择(旧位置);
复选框chk=(复选框)findViewById(R.id.check);
setOnCheckedChangeListener(新的OnCheckedChangeListener()
{
已更改复选框时的公共无效(复合按钮arg0,布尔值arg1){
TextView txt=(TextView)findViewById(R.id.xtra);
如果(arg1)
Log.d(“,”abul,checked”);
其他的
Log.d(“,”abul,未检查“);
}
}
);
machine_listview.setOnItemClickListener(新的OnItemClickListener(){
公共单击(适配器视图arg0,视图arg1,内部位置,
长arg3){
//TODO自动生成的方法存根
oldPosition=位置;
MachineStatusSingleton.setMachineNumber(arrayListofMachineNumbers.get(position));
SelectedList.this.finish();
}
});
handler=newhandler(){
public void handleMessage(android.os.Message msg){
machine_listview.setAdapter(适配器);
adapter.notifyDataSetChanged();
};
};
}
公共无效更新(ISubject arg0){
//TODO自动生成的方法存根
}
@凌驾
公共空间
{
super.ondestory();
MachineStatusSingleton。取消注册(此);
}
私有void getData(){
machineStatus_vector=MachineStatusSingleton.GetData();
arrayListofMachines=新的ArrayList();
arrayListofMachineNumbers=新的ArrayList();
用于(MDC机器状态温度:机器状态向量){
arrayListofMachines.add(temp.toString());
add(temp.getNumber());
}
集合。排序(arrayListofMachines);
Collections.sort(ArrayListofMachineEnumbers);
}
私有void updateData(){
getData();
handler.sendEmptyMessage(0);
adapter.notifyDataSetChanged();
int index=machine_listview.getFirstVisiblePosition();
View v=machine_listview.getChildAt(0);
int top=(v==null)?0:v.getTop();
// ...
//恢复
机器列表视图。设置从顶部选择(索引,顶部);
}
}
紧接着:TextView txt=(TextView)findViewById(R.id.xtra) 。。。添加以下内容:
如果(txt==null){Log.w(“,”TextView为null”);}
假设您的空指针异常在您选中复选框之前不会发生,这似乎是最可能的问题。当我忘记从XML布局中删除了相应的元素,或者我的ID错误时,我也遇到了同样的问题。通常,我会将“findViewById”返回的元素上的任何操作都封装在一个空检查中,以确保即使检索失败,应用程序至少不会崩溃。看起来您正在分配给
chk
,然后在声明时调用findViewById
,从而分配给txt
。我必须先声明它们,然后使用findViewById
分配给它们。我们的应用运行得很好,突然遇到NullPointerException或无法启动活动等错误
基本上,NullPointerException或无法启动活动发生在我们活动的onCreate()方法出现问题时
当:
您可以发布完整的堆栈跟踪吗?在
LogCat
中,查看最后几条红线,它将为您提供导致崩溃的精确java文件的精确行号。它读起来像是Dalvik。。。NullPointerException由…引起。
抱歉,各位。。我在这方面有一个问题:CheckBox chk=(CheckBox)findviewbyd(R.id.check);setOnCheckedChangeListener(新的OnCheckedChangeListener(){public void onCheckedChanged(复合按钮arg0,布尔值arg1){TextView txt=(TextView)findViewById(R.id.xtra);if(arg1)Log.d(“,”ab