Android NullPointerException正在尝试将listView设置为clickable

Android NullPointerException正在尝试将listView设置为clickable,android,listview,nullpointerexception,Android,Listview,Nullpointerexception,我的Android应用程序中出现了一个NullPointerException,据我从LogCat所知,它是在尝试将listview设置为clickable时发生的。这是我的密码 public class MyActivity extends Activity { private ListView lstView = (ListView) findViewById(R.id.listView1); private SQLiteDatabase database; private static

我的Android应用程序中出现了一个NullPointerException,据我从LogCat所知,它是在尝试将listview设置为clickable时发生的。这是我的密码

public class MyActivity extends Activity {
private ListView lstView = (ListView) findViewById(R.id.listView1);
private SQLiteDatabase database;

private static final String fields[] = { "field1", "field2", "field3" };


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    CursorAdapter dataSource;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //lstView.setClickable(true);   
private static final String fields[] = { "field1", "field2", "field3" };


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    CursorAdapter dataSource;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    lstView.setClickable(true);

    DatabaseHelper helper = new DatabaseHelper(this);
    database = helper.getWritableDatabase();
    Cursor data = database.query("mydb", fields, null, null, null, null, null);
    dataSource = new SimpleCursorAdapter(this, R.layout.row, data, fields, new int[] {R.id.field1, R.id.field2});
    database.close();
    lstView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
            Intent newActivity = new Intent(getApplicationContext(), NewIntent.class);
            newActivity.putExtra("itemId",lstView.getItemIdAtPosition(position));
            // start activity
            startActivity(newActivity);
          }
        });

}


}
LogCat说导致异常的MyActivity第31行代码是

lstView.setClickable(true);
固定的 这是工作代码。有一些变化。 公共类MyActivity扩展了ListActivity{ 专用数据库; 私有静态最终字符串字段[]={“field1”、“field2”、“_id”}

/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
游标适配器数据源;
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatabaseHelper=新的DatabaseHelper(此);
database=helper.getWritableDatabase();
游标数据=database.query(“caster”,字段,null,null,null,null,null);
dataSource=new SimpleCursorAdapter(this,R.layout.row,data,fields,newint[]{R.id.field1,R.id.field2});
最终ListView视图=getListView();
view.SetHeaderDivisEnabled(真);
view.addHeaderView(getLayoutFlater().inflate(R.layout.row,null));
close()数据库;
view.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(适配器视图arg0、视图arg1、内部位置、长arg3){
//准备意图
Intent newActivity=newintent(getApplicationContext(),newActivity.class);
newActivity.putExtra(“itemId”,view.getItemIdAtPosition(position));
//开始活动
星触觉(新活动);
}
});
}
}

您应该从布局中获取listView引用。可能会用这样的东西

listView = (ListView)findViewById(R.id.nameofyourlistView);
然后将listView设置为可单击


另一方面,为什么要将列表视图设置为可单击?您不必这样做,列表项在默认情况下是可单击的。

在使用它之前,您需要初始化列表视图

lstView= (ListView) findViewById(R.id.your_listview_id);

好的,在删除lstView.setClickable(true)行之后,我现在在listview本身的声明中得到一个错误。私有ListView lstView=(ListView)findViewById(R.id.listView1);请注意,它位于scrollview内的另一个linearlayout内。这可能会把工作搞砸吗?我的列表视图总是在线性布局中。您不需要滚动视图。当屏幕被填满时,ListView将自动滚动。@Carnivoris我怀疑您能否在运行
onCrete()
之前声明视图。尝试将声明行移动到
onCreate()
调用之后的
setContentView()
中。我知道了。我完全删除了scrollview,并将ListView放在onCreate()中。有一些其他错误的代码在那里,但我最终得到了修复。谢谢大家:)我现在就为将来有同样问题的人发布好代码。
listView = (ListView)findViewById(R.id.nameofyourlistView);
lstView= (ListView) findViewById(R.id.your_listview_id);