2011-07-15 9 views
0

このデータベースに何らかのデータを入力し、そのデータを表示しようとしていますが、Null Pointer Exception at getReadableDatabase()が表示されます。次のように私は、データを入力する場所からの主な活動は次のとおりです。getReadableDatabase()nullポインター例外

public class TabListData extends Activity implements OnClickListener { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button b = (Button) findViewById(R.id.enter); 
     b.setOnClickListener(this); 
     Button b1 = (Button) findViewById(R.id.employeeslist); 
     b1.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 

     EditText name = (EditText) findViewById(R.id.name); 
     EditText mobile = (EditText) findViewById(R.id.mobile); 

     String nam = name.getText().toString(); 
     String mob = mobile.getText().toString(); 

     Button b = (Button) v; 
     Button b1 = (Button) v; 
     Database d = new Database(getBaseContext()); 

     switch (b.getId()) { 
     case R.id.enter: 
      d.input(nam, mob); 
     case R.id.employeeslist: 
      /* ArrayList<EmployeesResult> results = d.selectEmployees(); 
       Toast t = Toast.makeText(getBaseContext(), "# records: " 
         + results.size(), 1000); 
       t.show();*/ 
      Intent i = new Intent(this, EmployeesList.class); 
      // i.putExtra("Name", "Name"); 
      startActivity(i); 
     } 
     } 
    } 

これは私のヘルパークラス

public class BaseHelper extends SQLiteOpenHelper { 

    public BaseHelper(Context context) { 
     super(context, "Employees.db", null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     String createtable = "create table Employee " + "(Name TEXT, " + "Mobile TEXT)"; 
     db.execSQL(createtable); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
    } 
} 

これは私のDatabaseクラスです。私はそれを入力とデータ検索に使用しています。 selectEmployees()メソッドが存在しないときに入力用にうまくいきましたが、現在はNull Pointer Exceptionを表示しています。

public class Database { 

    private BaseHelper helper; 
    SQLiteDatabase db; 
    public Database(Context c){ 
     helper = new BaseHelper(c); 
    } 

    public void input(String Name, String Mobile){ 
     db = helper.getWritableDatabase(); 
     try{ 
     ContentValues values = new ContentValues(); 
     values.put("Mobile", Mobile); 
     values.put("Name", Name); 
     db.insert("Employee", "", values); 
     Log.e("ENTERED", "ENTERED "+values); 
     }finally { 
      if (db != null) 
       db.close(); 
     } 
    } 
    public ArrayList<EmployeesResult> selectEmployees() { 

     db = helper.getReadableDatabase(); 
     try{ 
     ArrayList<EmployeesResult> results = new ArrayList<EmployeesResult>(); 
     Cursor c = db.rawQuery("select * from Employee", null); 

     if (c.getCount() > 0) { 
       c.moveToFirst(); 
       do { 
        results.add(new EmployeesResult(
          c.getString(c.getColumnIndex("Name")))); 
          //c.getInt(c.getColumnIndex("Mobile")))); 
       }while(c.moveToNext()); 
     } 
     return results; 
    }finally { 
     if (db != null) 
      db.close(); 
    } 
    } 
} 

EmployeeResultクラス:

public class EmployeesResult { 
    public EmployeesResult(String Name){ 
     name = Name; 
     //mobile = Mobile; 
    } 
    public String name; 
    public int mobile; 
} 

これはLogcat

ある
07-15 23:44:11.008: ERROR/AndroidRuntime(292): FATAL EXCEPTION: main 
07-15 23:44:11.008: ERROR/AndroidRuntime(292): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.TabListData/com.TabListData.EmployeesList}: java.lang.NullPointerException 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.os.Looper.loop(Looper.java:123) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at dalvik.system.NativeStart.main(Native Method) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292): Caused by: java.lang.NullPointerException 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at com.TabListData.Database.selectEmployees(Database.java:35) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at com.TabListData.EmployeesList.onCreate(EmployeesList.java:30) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
07-15 23:44:11.008: ERROR/AndroidRuntime(292):  ... 11 more 
+0

あなたのコードにインデントとブラケットで起こっていくつかの非常に奇妙なことがあります。ここにコピーしたときにフォーマットが壊れていないかどうか確認したい場合があります。 – thegrinner

+0

投稿者logcat .. –

+0

また、どのラインがエラーを投げていますか? – thegrinner

答えて

1
私の問題は、問題が正確に問題がListActivityとEmployeeResultクラスにいたところ私が見つけた解決され

ListActivityの場合、表示するテキストのみのXMLレイアウトを使用しますこの

<?xml version="1.0" encoding="UTF-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android"  
android:layout_width="fill_parent"  
android:layout_height="fill_parent"  
android:padding="10dp"  
android:textSize="16sp" > 
</TextView> 

とListActivityであなただけのonCreate()メソッド

List<String> data = dh.SelectStudent(); 
setListAdapter(new ArrayAdapter<String>(ListofStudents.this, R.layout.text, data)); 

にこのようなListAdapter

を設定する必要があり、ArrayAdapterでEmployeesResultクラステイクはString insted同様のListView 内のテキストリスト

DataBaseクラスのメソッドは、

である必要があります。
public ArrayList<String> SelectStudent() { 
    SQLiteDatabase db = _dbHelper.getReadableDatabase(); 
    try { 
     ArrayList<String> results = new ArrayList<String>(); 
     Cursor c = db.rawQuery("select * from Student", null); 
     if (c.getCount() > 0) { 
      c.moveToFirst(); 
      do { 
       results.add(c.getString(1)); 
       // results.add(c.getString(4)); 

      } while (c.moveToNext()); 
     } 
     return results; 
    } finally { 
     if (db != null) 
      db.close(); 
    } 
} 

私はListとArrayAdepterのStringを渡しました。リストビューの項目にNameやMobile Number、StringとImageの組み合わせが1つ以上必要な場合は、別のクラスを作成する必要がありますあなたには画像と文字列があり、ListとArrayAdepterのStringの代わりにそのクラスを渡す必要があります。

ありがとう

+6

同じ問題が発生しました。しかし、私はあなたの修正を理解していません。 NullPointerExceptionは 'SQLiteDatabase db = _dbHelper.getReadableDatabase();'にスローされますが、この行は変更されませんでしたが、なぜ修正されましたか?ありがとう! – Dagang

1

エラーがコンテキスト

にヌル・ポインタによって引き起こされることが
public class SqLite extends SQLiteOpenHelper { 
    public SqLite(Context context, String table, boolean readOnly) { 
     super(context, DB_NAME, null, 1); 
     getReadableDatabase();