我正在尝试检索SQLite值并加载到listView MainActivity.我正在按照本教程.
但是,当我的应用程序刚刚开始时,它崩溃并显示出来Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
.
好像我还没有初始化listView.setAdapter
.我检查了教程,仍然无法弄清楚我在这里错过了什么.
活动A.
public class MainActivity extends AppCompatActivity { InfoAPI sqlcon; private SimpleCursorAdapter dataAdapter; private SQLiteDatabase database; private MyDatabaseHelper dbHelper; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); listView=(ListView)findViewById(R.id.listView2); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this); sqlcon = new InfoAPI(this); BuildList(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.create_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. switch(item.getItemId()) { case R.id.add: // create new file View menuItemView = findViewById(R.id.add); PopupMenu po = new PopupMenu(MainActivity.this, menuItemView); //for drop-down menu po.getMenuInflater().inflate(R.menu.popup_menu, po.getMenu()); po.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { Toast.makeText(MainActivity.this, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show(); if ("Create New File".equals(item.getTitle()) ) { Intent intent = new Intent(MainActivity.this, Information.class); // go to Information class startActivity(intent); } return true; } }); po.show(); //showing popup menu } return super.onOptionsItemSelected(item); } public void BuildList() { sqlcon.open(); Cursor cursor1=sqlcon.readData(); String[] columns=new String[]{ MyDatabaseHelper.Weather,MyDatabaseHelper.Date,MyDatabaseHelper.Status,MyDatabaseHelper.TimeIn_Info,MyDatabaseHelper.TimeOut_Info }; int[] to=new int[] { R.id.weather, R.id.date,R.id.status,R.id.in,R.id.out }; dataAdapter = new SimpleCursorAdapter(this, R.layout.retrieve_data, cursor1, columns, to, 0); listView.setAdapter(dataAdapter); } }
错误Logcat
12-03 05:53:49.622 2588-2588/? E/AndroidRuntime? FATAL EXCEPTION: main Process: com.example.project.myapplication, PID: 2588 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.project.myapplication/com.example.project.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
这两个线路,其中代码是指 BuildList();
和 listView.setAdapter(dataAdapter);
我知道这是一个常见的错误,并很快将被标记为复制,但我真的想不通.有人可以帮帮我吗 ?谢谢
在setContentView()之后初始化listview.
更改你的onCreate()方法:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=(ListView)findViewById(R.id.listView2); dbHelper = new MyDatabaseHelper(this); sqlcon = new InfoAPI(this); BuildList(); }