2017-05-18 17 views
0

ユーザーがSQLiteデータベースに登録したときに入力した情報を保存していますが、電子メールアドレスを送信するとエラーが発生してアプリケーションがクラッシュします。それが理由なら、それをどう修正するか教えていただけますか?そうでない場合は、正しい理由と解決策を教えてください。電子メールアドレスをSQLiteデータベースに送信中にエラーが発生しました

私のjavaファイル:

public class MainActivity extends AppCompatActivity { 

AutoCompleteTextView txtmobileno, txtemail, txtname,txtuname; 
EditText txtpass; 
private SQLiteDatabase sqLiteDatabase; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    constraintLayout = (ConstraintLayout)findViewById(R.id.constraintlayout); 

    txtemail = (AutoCompleteTextView) findViewById(R.id.txtemail); 
    txtmobileno = (AutoCompleteTextView) findViewById(R.id.txtmobileno); 
    txtname = (AutoCompleteTextView) findViewById(R.id.txtname); 
    txtuname = (AutoCompleteTextView)findViewById(R.id.txtuname); 
    txtpass = (EditText)findViewById(R.id.txtpass); 

    btnSignUp = (ImageButton) findViewById(R.id.btnSignUp); 
    btnClear = (ImageButton) findViewById(R.id.btnClear); 

    createDatabase(); 

    btnSignUp.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String email = txtemail.getText().toString(); 
      String mobileno = txtmobileno.getText().toString(); 
      String name = txtemail.getText().toString(); 
      if (name.trim().equals("")) 
       txtname.setError("Please enter your name"); 
      else if (email.trim().equals("")) 
       txtemail.setError("Please enter email Address"); 
      else if (!email.contains("@") || !email.contains(".")) 
       txtemail.setError("Please enter a valid email Address"); 
      else if (mobileno.trim().length() < 10) 
       txtmobileno.setError("Not a valid mobile no"); // I'm finding solution to validate mobile no 
      else { 
       insertIntoDB(); 
       Snackbar snackbar = Snackbar 
         .make(constraintLayout, "Success", Snackbar.LENGTH_LONG) 
         .setAction("HIDE", new View.OnClickListener() { 
          @Override 
          public void onClick(View view) { 
          } 
         }); 
       snackbar.show(); 
      } 
     } 
    }); 

    btnClear.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      txtemail.setText(""); 
      txtmobileno.setText(""); 
      txtname.setText(""); 
      txtname.setError(null); 
      txtemail.setError(null); 
      txtmobileno.setError(null); 
     } 
    }); 

    txtmobileno.setOnEditorActionListener(new EditText.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 

      if(actionId == EditorInfo.IME_ACTION_DONE){ 
       btnSignUp.performClick(); 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

private void createDatabase(){ 
    sqLiteDatabase = openOrCreateDatabase("UserDatabase", Context.MODE_PRIVATE,null); 
    //sqLiteDatabase.execSQL("IF EXISTS (SELECT * FROM USERS) DROP TABLE USERS"); 
    sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS USERS(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, NAME VARCHAR(30)," + 
      "USERNAME VARCHAR(15), EMAIL TEXT, PASSWORD VARCHAR(15), MOBILE VARCHAR(11))"); 
} 

protected void insertIntoDB(){ 
    String name, uname, email, password, mobile; 
    name = txtname.getText().toString(); 
    uname = txtuname.getText().toString(); 
    email = txtemail.getText().toString(); 
    password = txtpass.getText().toString(); 
    mobile = txtmobileno.getText().toString(); 

    String query = "INSERT INTO USERS VALUES(" + name +"," + uname + "," + email + "," + password + "," + mobile + ");"; 

    sqLiteDatabase.execSQL(query); 
} 
} 

EDIT:追加されましたエラーログ

Error log

+2

あなたはエラーログを質問に含めないでください。 – Denny

+0

エラーログを追加してください。 –

+0

ごめんなさい。私はスクリーンショットを撮ったが、追加するのを忘れた –

答えて

1

あなたのコアエラーがINSERTクエリのためにあなたが引用符で、挿入する値を囲むていないことです。あなたの現在のクエリを解析しようとして、構文が正しくないため、SQLパーサは、チョーク

insert into TABLE values('[email protected]') 

:それはこのようなものであるべきとき

insert into TABLE values([email protected]) 

:あなたのクエリは、建設後、次のようになります。

は、たとえば、準備されたSQLクエリを使用してみてください:

String sql = "INSERT INTO table_name (column_1, column_2) VALUES (?, ?)"; 
SQLiteStatement statement = db.compileStatement(sql); 

int intValue = 57; 
String stringValue = "hello"; 

statement.bindLong(1, intValue); // These match to the two question marks in the sql string 
statement.bindString(2, stringValue); 

long rowId = statement.executeInsert(); 

、あるいはより良いあなたは、たとえば、これを行うことができる場所SQLiteOpenHelperを使用します。

ContentValues insertValues = new ContentValues(); 
insertValues.put("EMAIL", "[email protected]"); 
db.insert("CashData", null, insertValues); 
+0

ありがとうございました。欠落している二重引用符は2つの問題の1つでした。 –

1

機能とダブルチェック下記によってデータベースにデータを挿入しようとするが、実際に作成したかどうか、電子メールフィールドです。以下の関数は単なる例です。

public void InsertToOppoStats(ArrayList<OppoStats> bean) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues userValues = new ContentValues(); 

    for (int i = 0; i < bean.size(); i++) { 
     ---------------------------------------- 
     userValues.put("column name", "value"); 
     ---------------------------------------- 

     userValues.put("id", bean.get(i).getID(); 
     userValues.put("name", bean.get(i).getName()); 
     userValues.put("std", bean.get(i).getStd()); 
     userValues.put("city", bean.get(i).getCity()); 

    } 

    db.insert("xyz_table", null, userValues); 

} 
+0

これを代替方法として心に留めておきます:) –

+0

@Mayank:.dbファイルを作成し、assestフォルダとデータベースにアクセスするよりも柔軟性を持たせたい場合。それは非常に簡単で、単純なSQLのようなデータ構造を変更することができます。 [githubのデモリンク](https://github.com/jakirseu/Android-Pre-Built-database) – ashish

1
String query = "INSERT INTO USERS VALUES(" + name +"," + uname + ",'" + email + "'," + password + "," + mobile + ");"; 

このコードを試してみてください。 ''を一重引用符で囲んでください。

希望します。

関連する問題