当进入另一个活动Android应用程序崩溃

-3 java sqlite android

我正在尝试TextViews使用SQLiteDataBase 填充第二个事件.当用户点击该项目时,ListView他/她可以在第二个上查看事件的详细信息,Activity但每当我点击某个事件时它就会崩溃.

MainActivity.java

  myList.setAdapter(myCursorAdapter);

    myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Cursor myCursor = (Cursor) myList.getItemAtPosition(position);
            String pickedString = myCursor.getString(1);

            Intent intent = new Intent(getApplicationContext(),EventDetails.class);
            intent.putExtra("name_var", pickedString);
            startActivity(intent);
        }
    }
Run Code Online (Sandbox Code Playgroud)

DBHelper:

public ArrayList<String> getEvent(String name)
{
    ArrayList<String> array_list = new ArrayList<String>();
    //hp = new HashMap();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery( "select * from events WHERE name='" +name+"'", null );
    res.moveToFirst();

    array_list.add(res.getString(res.getColumnIndex(EVENTS_COLUMN_NAME)));
    array_list.add(res.getString(res.getColumnIndex(EVENTS_COLUMN_DATE)));
    array_list.add(res.getString(res.getColumnIndex(EVENTS_COLUMN_DESCRIPTION)));
    array_list.add(res.getString(res.getColumnIndex(EVENTS_COLUMN_TIME_START)));
    array_list.add(res.getString(res.getColumnIndex(EVENTS_COLUMN_TIME_END)));
    array_list.add(res.getString(res.getColumnIndex(EVENTS_COLUMN_ADDRESS)));
    array_list.add(res.getString(res.getColumnIndex(EVENTS_COLUMN_POSTCODE)));

    return array_list;
}
Run Code Online (Sandbox Code Playgroud)

EventDetails.java

public class EventDetails extends Activity {

private DBHelper mydb;
TextView title = (TextView) findViewById(R.id.event_title);
TextView time_date = (TextView) findViewById(R.id.event_time_date);
TextView description = (TextView) findViewById(R.id.event_description);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    String name = intent.getStringExtra("name_var");

    mydb = new DBHelper(this);

    ArrayList<String> valuesFromDb;
    valuesFromDb = mydb.getEvent(name);

    title.setText(valuesFromDb.get(1));
    time_date.setText(valuesFromDb.get(2));
    description.setText(valuesFromDb.get(3));


}
}
Run Code Online (Sandbox Code Playgroud)

laa*_*lto 7

TextView title = (TextView) findViewById(R.id.event_title);
TextView time_date = (TextView) findViewById(R.id.event_time_date);
TextView description = (TextView) findViewById(R.id.event_description);
Run Code Online (Sandbox Code Playgroud)

你打电话findViewById()太早,因为活动不会有一个在这里得到NPE Window之前onCreate().

将这些初始化移动到onCreate().还要setContentView()在它们之前添加一个设置包含这些id的视图的布局,以便返回非null值,并且在尝试调用时不会获得NPE setText().