Exception
:
Unable to start activity ComponentInfo{com.scytec.datamobile.vd.gui.android/com.scytec.datamobile.vd.gui.android.SelectedList}: java.lang.NullPointerException..
我只想显示复选框列表视图,并在每次检查时显示“已检查”,但我不知道为什么这会给我一个例外。
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);
}
}
答案 0 :(得分:11)
我们运行我们的应用程序非常好,突然遇到 NullPointerException 或无法启动活动等错误。
当我们的Activity的 onCreate()方法出现问题时,基本上会出现 NullPointerException 或无法启动活动。
发生在以下情况时:
我们更改与此活动相关的布局的任何xml值
如果我们没有在我们的Acivity中正确映射xml UI
尝试访问另一个布局文件中的UI。
解决方案:
首先交叉检查所有映射元素
提供唯一的命名
答案 1 :(得分:9)
直接之后:
TextView txt =(TextView)findViewById(R.id.xtra);
...加上这个:
if(txt == null){Log.w(“”,“TextView为null”); }
假设在您选中复选框之前未发生空指针异常,这听起来像是最可能的问题。当我忘记从XML布局中删除了相应的元素,或者我的ID出错时,我遇到了同样的问题。通常我会在null检查中对“findViewById”返回的元素进行任何操作,以确保即使检索失败,应用程序也至少不会崩溃。
答案 2 :(得分:1)
在您声明时,您似乎正在通过调用chk
分配给txt
,然后分配findViewById
。我必须先声明它们,然后使用findViewById
分配给它们。