2016-08-24 7 views
-2

私は最初の基本的なSQLiteアプリケーションを実行しようとしていますが、クラッシュし、nullオブジェクト参照エラーが発生しました。Sqlite-Androidに挿入中にgetText()でnullオブジェクト参照エラーが発生しました

主な活動

public class MainActivity extends AppCompatActivity{ 
EditText editText_name,editText_city; 
Button button_insert; 
MyDBHandler mydb; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // editText_Id=(EditText)findViewById(R.id.editText_Id); 
    editText_name=(EditText)findViewById(R.id.editText_name); 
    editText_city=(EditText)findViewById(R.id.editText_city); 

    button_insert=(Button) findViewById(R.id.button_insert); 
    insert(); 

} 
public void insert() 
{ 

    button_insert.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      boolean inserted= mydb.addStudent(editText_name.getText().toString(),editText_city.getText().toString()); 

      if (inserted =true) 
       Toast.makeText(MainActivity.this,"Data is inserted",Toast.LENGTH_LONG).show(); 
      else 
       Toast.makeText(MainActivity.this,"Data is Not inserted",Toast.LENGTH_LONG).show(); 

     } 
    }); 

} 
} 

このエラーが発生しon a null object reference私は、このコードを実行すると。 エラーが発生するコード行。

boolean inserted= mydb.addStudent(editText_name.getText().toString(),editText_city.getText().toString()); 

MyDBHandlerクラスコード

public class MyDBHandler extends SQLiteOpenHelper { 
public static final String DB_NAME="Student"; 
//public static final String KEY_ID="key_id"; 
public static final String KEY_NAME="key_name"; 
public static final String KEY_CITY="key_city"; 


public static final String TBL_NAME="info"; 
public static final int DB_VERSION=1; 


public MyDBHandler(Context context) { 
    super(context, DB_NAME, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

// String CREATE_TABLE="CREATE TABLE info(id INTEGER PRIMARY KEY,name TEXT,city TEXT)"; 
    db.execSQL("create table " + TBL_NAME +"(name TEXT,city TEXT)"); 
} 

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

} 

public boolean addStudent(String name, String city) { 

    SQLiteDatabase db=getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    //contentValues.put(KEY_ID,id); 
    contentValues.put(KEY_NAME,name); 
    contentValues.put(KEY_CITY,city); 
    long result= db.insert(TBL_NAME,null,contentValues); 

    if (result == -1) 
    { 
     return false; 
    } 
    else 

     return true; 
} 
} 

Logcat

08-24 12:06:33.884 30371-30371/? E/AndroidRuntime: FATAL EXCEPTION: main 
               Process: com.example.owner.sqlite, PID: 30371 
               java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.owner.sqlite.MyDBHandler.addStudent(com.example.owner.sqlite.Student)' on a null object reference 
                at com.example.owner.sqlite.MainActivity.onClick(MainActivity.java:35) 
                at android.view.View.performClick(View.java:4785) 
                at android.view.View$PerformClick.run(View.java:19884) 
                at android.os.Handler.handleCallback(Handler.java:739) 
                at android.os.Handler.dispatchMessage(Handler.java:95) 
                at android.os.Looper.loop(Looper.java:135) 
+0

可能な重複のように確認することができます[何NullPointerExceptionがある、と私はそれをどのように修正すればよい?](http://stackoverflow.com/question/218384/what-is-a-nullpointの覚え方とやり方は-i-fix-it) – Selvin

+0

明らかに 'mydb'はヌルです – Selvin

+0

' mydb'はヌルです。それを初期化する。 – Piyush

答えて

0

デシベルがnullで、あなたはそれを初期化する必要があります。

SQLiteDatabase db = this.getWritableDatabase(); 

SQLiteDatabaseを終了したら、それを閉じる必要があります。

db.close(); 
0

使用前にmydbを初期化してください。忘れずに閉じてください。

mydb = new MyDBHandler(this); // without initialize the mydb is null that's the reason of your error. 
boolean inserted= mydb.addStudent(editText_name.getText().toString(),editText_city.getText().toString()); 

if (inserted =true) 
    Toast.makeText(MainActivity.this,"Data is inserted",Toast.LENGTH_LONG).show(); 
else 
    Toast.makeText(MainActivity.this,"Data is Not inserted",Toast.LENGTH_LONG).show(); 
mydb.close(); 
0

これは、MyDBHandlerクラスのインスタンスを作成していないために発生しています。

mydb = new MyDBHandler(getApplicationContext()); 

この行をonCreate()メソッドに書き込みます。

0

Initializeそのヌルと(inserted = true)が間違った構文Boolean変数の場合は、のif(inserted)

button_insert.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      boolean inserted; 
      f(mydb == null){ 
       mydb = new MyDBHandler(MainActivity.this); 
       inserted = mydb.addStudent(editText_name.getText().toString(),editText_city.getText().toString()); 
      }else{ 
       inserted = mydb.addStudent(editText_name.getText().toString(),editText_city.getText().toString()); 
      } 

      if (inserted) 
       Toast.makeText(MainActivity.this,"Data is inserted",Toast.LENGTH_LONG).show(); 
      else 
       Toast.makeText(MainActivity.this,"Data is Not inserted",Toast.LENGTH_LONG).show(); 

     } 
    }); 
関連する問題