2015-09-09 2 views
-2

Я новичок в разработке Android и получаю исключение NullPointerException при попытке получить доступную для записи базу данных. Вот код:NPE в Android Studio при общении с базой данных

Основная деятельность

public class MainActivity extends AppCompatActivity { 

    MyDatabase myDatabase; 
    SQLiteDatabase sqLiteDatabase; 
    EditText textOne; 
    EditText textTwo; 
    Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     textOne = (EditText) findViewById(R.id.textOne); 
     textTwo = (EditText) findViewById(R.id.textTwo); 

    } 

    public void addInfo(View view) { 
     String name = textOne.getText().toString(); 
     String address = textTwo.getText().toString(); 
     myDatabase = new MyDatabase(context); 
     sqLiteDatabase = myDatabase.getWritableDatabase(); 
     myDatabase.addData(name, address, sqLiteDatabase); 
     myDatabase.close(); 

     textOne.setText(""); 
     textTwo.setText(""); 

    } 
} 

Мой код базы данных:

public class MyDatabase extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "info.db"; 
    private static final String TABLE_NAME = "Personal_Info"; 
    private static final String NAME_COLUMN = "names"; 
    private static final String ADDRESS_COLUMN = "address"; 
    private static final String ROW_IDENTIFIER = "_id"; 
    private static int DATABSE_VERSION = 1; 
    private static String query = "CREATE TABLE " + TABLE_NAME + "(" + ROW_IDENTIFIER + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME_COLUMN + " TEXT, " + ADDRESS_COLUMN + " TEXT);"; 

    public MyDatabase(Context context) { 
     super(context, DATABASE_NAME, null, DATABSE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     try { 
      db.execSQL(query); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

    } 

    public void addData(String name, String address, SQLiteDatabase db) { 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(NAME_COLUMN,name); 
     contentValues.put(ADDRESS_COLUMN,address); 
     db.insert(TABLE_NAME,null,contentValues); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     try { 
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

     onCreate(db); 
    } 
} 

Ошибка генерируется на этой линии в MainActivity:

myDatabase = new MyDatabase(context); 

Все входные приветствуется ,

+2

Вы также можете опубликовать свой фрагмент ловушки. Из какой линии выступает NPE? –

ответ

0

Вы никогда не инициализировали переменную context, поэтому она равна нулю. Поскольку у вас есть активность, вы можете также просто сделать это:

myDatabase = new MyDatabase(this); 

где this относится к экземпляру деятельности. Вы можете сделать это внутри onCreate(), если хотите, или оставить его там, где находится addItem().

Смежные вопросы