2017-05-18 2 views
0

Mir Speicherung der Daten durch den Benutzer eingegeben werden, wenn er auf der App in einer SQLite-Datenbank registriert, aber die App stürzt mit einem Fehler, wenn ich die E-Mail-Adresse einreichen aufzutreten scheint. Wenn das der Grund ist, kannst du mir sagen, wie ich es korrigieren kann? Wenn nicht, bitte sagen Sie mir den richtigen Grund und die Lösung.Fehler beim Senden E-Mail-Adresse an SQLite Datenbank

Meine Java-Datei:

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: Hinzugefügt Fehlerprotokoll

Error log

+2

Was Sie denken, Sie sollten das Fehlerprotokoll in der Frage nicht enthalten? – Denny

+0

Bitte Fehlerprotokoll hinzufügen. –

+0

Hoppla. Es tut uns leid. Ich habe den Screenshot gemacht, aber vergessen, –

Antwort

1

Ihr Kern Fehler ist, dass für den Einsatz Abfrage, die Sie nicht die Werte umschließenden eingefügt werden, in Anführungszeichen. Ihre Suche nach dem Aufbau, sieht etwa so aus:

insert into TABLE values([email protected]) 

Wenn es so etwas wie dies sein sollte:

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

Der SQL-Parser Drosseln beim Versuch, Ihre aktuelle Abfrage zu analysieren, weil die Syntax falsch ist .

Try vorbereitete SQL-Abfragen verwendet werden, zum Beispiel:

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(); 

Oder noch besser SQLiteOpenHelper verwenden, wo man dies beispielsweise tun können:

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

Danke. Die fehlenden Anführungszeichen waren einer der beiden Punkte. –

1

Versuchen von unten Funktion und überprüfen Daten zur Datenbank einzufügen ist E-Mail-Feld oder nicht wirklich erstellt .und unten Funktion ist nur ein Beispiel.

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

Ich werde dies als eine alternative Möglichkeit beachten, Danke :) –

+0

@Mayank: Wenn Sie mehr Flexibilität als versuchen möchten, eine .db-Datei zu machen und in Assest-Ordner und dann auf die Datenbank zugreifen. Das ist sehr einfach und Sie können Datenstruktur wie einfach meine SQL ändern. [Demo Link von Github] (https://github.com/jakirseu/Android-Pre-Built-Datenbank) – ashish

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

diesen Code Versuchen. Fügen Sie zwischen einzelnen Anführungszeichen hinzu.

Hoffe, es hilft

Verwandte Themen