2013-03-05 4 views
0

У меня есть пример приложения, которое создает базу данных, таблицу и вставляет строку значений.Исключение Null Pointer при создании базы данных

Вот мой MainActivity.java:

public class MainActivity extends Activity { 

protected static final android.content.Context Context = null; 
public String ReadingMode=""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 


      SQLiteDatabase sampleDB = Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null); 

      sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " + 
         "SampleTable " + 
         " (LastName VARCHAR, FirstName VARCHAR," + 
         " Country VARCHAR, Age INT(3));"); 

      sampleDB.execSQL("INSERT INTO " + 
         "SampleTable " + 
         " Values ('Makam','sample','India',25);"); 

      sampleDB.close();      
     } 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

} 

Когда я отлаживать построчно, Null pointer exception поднимается вблизи линии:

SQLiteDatabase sampleDB = Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null); 

Я вижу, что sampleDB является недействительным и Database не создается.

Есть ли что-то не так с моим кодом?

ответ

3

вы инициализируете свой контекст с нулевым

protected static final android.content.Context Context = null; 

поэтому, когда вы используете нулевой контекст, он будет бросать NPE, вы можете установить контекст с активностью контекстом, а затем использовать ваш контекст

Context = MainActivity.this; 

или просто использовать этот

SQLiteDatabase sampleDB = this.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null); 
+0

Наконец-то узнала мою ошибку. Благодаря!!!!! – Mahe

+0

добро пожаловать;) –

1

Вы инициализацией, как protected static final android.content.Context Context = null; , а затем используя его как Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);

Он будет вызывать исключение нулевого указателя для очевидного.

+0

Спасибо! Это сработало. – Mahe

1

Repalce

SQLiteDatabase sampleDB = Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null); 

с

SQLiteDatabase sampleDB = this.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null); 

Причина:

  1. Activity является подклассом Context, так что вы можете использовать this.
  2. openOrCreateDatabase не является статическим методом, поэтому вы не можете назвать его с помощью имени класса.
+0

Спасибо за вашу разработку !!! – Mahe