2017-07-26 1 views
-1

私は非常に多くのソリューションを見て、すべてを適用しましたが、まだ私のコードでnullポインタの例外を取得します。ここで私のコードは誰もができるだけ速く見て返信しています。前もって感謝します。Java.lang.nullpointerexception in androidのデータベース保存クエリーで

DBHandler.javaクラスコードが

public class DBHandler extends SQLiteOpenHelper { 
//Database Version 
private static final int DATABASE_VERSION=1; 
// Database Name 
private static final String DATABASE_NAME="Patient.db"; 
//Table Name 
private static final String TABLE_NAME="patientDetail"; 

//Table Columns Names 
private static final String ID="id"; 
private static final String NAME="name"; 
private static final String ADDRESS="address"; 
private static final String PHONE_NUMBER="phone_number"; 

//Constructor 

public DBHandler(Context context) 
{ 
    super(context,DATABASE_NAME,null,DATABASE_VERSION); 
} 

//Creating Tables 

@Override 
public void onCreate(SQLiteDatabase db) { 

    String CREATE_PATIENT_DETAIL_TABLE="CREATE TABLE "+TABLE_NAME+"(" 
      + ID+" INTEGER PRIMARY KEY AUTOINCREMENT," 
      +NAME+" TEXT," 
      +ADDRESS +" TEXT," 
      +PHONE_NUMBER + " TEXT)" ; 

    db.execSQL(CREATE_PATIENT_DETAIL_TABLE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    //Drop older tables if exist 

    db.execSQL("DROP TABLE IF EXIST "+TABLE_NAME); 

    /// Create Table again 
    onCreate(db); 
} 
public boolean insertData(String name,String address, String ph_no) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values= new ContentValues(); 
    values.put(NAME,name); 
    values.put(ADDRESS,address); 
    values.put(PHONE_NUMBER,ph_no); 
    long result = db.insert(TABLE_NAME,null,values); 
    if(result == -1) 
     return false; 
    else 
     return true; 

} 
} 


//insertPatient.java Class Code 

public class insertPatient extends Fragment { 

DBHandler mydb=null; 

EditText editname,editaddress,editph_no; 

Button btn_adddata; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.insert_patient, container, false); 

    mydb = new DBHandler(getActivity()); 

    editname=(EditText) rootView.findViewById(R.id.insert_name); 
    editname=(EditText) rootView.findViewById(R.id.insert_address); 
    editname=(EditText) rootView.findViewById(R.id.insert_ph_no); 
    btn_adddata=(Button) rootView.findViewById(R.id.insert_button); 
    btn_adddata.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      adddata(); 
     } 
    }); 
    return rootView; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mydb = new DBHandler(getActivity()); 
} 
public void adddata() 
{ 
    mydb = new DBHandler(getActivity()); 
    Toast.makeText(getActivity(), "working button", Toast.LENGTH_LONG).show(); 
    try { 

     boolean isinserted = mydb.insertData(editname.getText().toString(), editaddress.getText().toString(), editph_no.getText().toString()); 

     if (isinserted) { 
      Toast.makeText(getActivity(), "data saved", Toast.LENGTH_LONG).show(); 
     } else { 
      Toast.makeText(getActivity(), "data Not saved", Toast.LENGTH_LONG).show(); 
     } 
    } 
    catch (Exception e) { 
     Toast.makeText(getActivity(), String.valueOf(e), Toast.LENGTH_LONG).show(); 
    } 
} 
} 

私はdbhandlerオブジェクトのinitializtionため、getactivity()、にgetcontext()とgetbasecontextを()ボタンのいずれかが初期化されているようなので、多くのソリューションをapplliedたりしていない、また、多くを作りました私のdbハンドラはさまざまなソリューションで変更されましたが、同じエラーが発生しました。私は断片クラスを使用しているので、私はアクティビティのための私の解決策をチェックしなかったので、私はそれを試しました。

+4

へのラインがスタックトレースを提供することを例外

boolean isinserted = mydb.insertData(editname.getText().toString(), editaddress.getText().toString(), editph_no.getText().toString()); 

編集をスロー

editname=(EditText) rootView.findViewById(R.id.insert_name); editname=(EditText) rootView.findViewById(R.id.insert_address); editname=(EditText) rootView.findViewById(R.id.insert_ph_no); 

あなたのコード内での行の下に表示さ! –

+0

あなたのlogcatを追加してください –

+0

私はデータベースとドンで新しいです、どのようにlogcatを追加する方法とstacktraceを取得する方法を知っている。ありがとう –

答えて

2

あなたの問題は、必要なものの代わりにeditnameに割り当てられているgetTextメソッドを使用していることです。あなたのinsertPatientクラスで

editname=(EditText) rootView.findViewById(R.id.insert_name); 
editname=(EditText) rootView.findViewById(R.id.insert_address); 
editname=(EditText) rootView.findViewById(R.id.insert_ph_no); 

へ:

editname=(EditText) rootView.findViewById(R.id.insert_name); 
editaddress=(EditText) rootView.findViewById(R.id.insert_address); 
editph_no=(EditText) rootView.findViewById(R.id.insert_ph_no); 
+0

あまりにもイワンありがとうございます。 –

+0

あなたの質問を解決した場合、回答を受け入れることを検討してください。 –

+0

ありがとう@MiguelIsla、あなたは正しいです。それがあなたの質問を解決した場合は、受け入れることを検討してください。 – Ivan

-1

あなたはeditaddresseditph_noを初期化していません。 diff30での編集名を3回だけ初期化しています。 あなたがeditaddressとeditph_noから値を取得しているし、それが

editname=(EditText) rootView.findViewById(R.id.insert_name); 
editaddress =(EditText) rootView.findViewById(R.id.insert_address); 
editph_no =(EditText) rootView.findViewById(R.id.insert_ph_no); 
+0

おかげでMahesh Gawhane。 –

関連する問題