2017-02-17 8 views
-1

Я пытаюсь создать страницу входа/регистрации в своем Android-приложении с помощью SQLite. Прямо сейчас мое приложение разбивается на странице регистрации (где вы создаете новую учетную запись, используя адрес электронной почты/пароль. Ниже приведены коды для моей страницы регистрации и страницы DatabaseHelper. Обратите внимание, что в моем приложении указано, что ошибка находится в helper.insertContact . (с) линия SignUp, что приводит нас к ошибке в методе insertContact в DatabaseHelperРегистрация Страница Использование приложения SQLite Crash для Android

это бревно кот:

02-16 22:20:47.236 10925-10925/? I/art: Not late-enabling -Xcheck:jni (already on) 
02-16 22:20:47.236 10925-10925/? W/art: Unexpected CPU variant for X86 using defaults: x86 
02-16 22:20:47.405 10925-10925/com.example.reynaldo.project1 W/System: ClassLoader referenced unknown path: /data/app/com.example.reynaldo.project1-1/lib/x86 
02-16 22:20:47.430 10925-10925/com.example.reynaldo.project1 I/InstantRun: Instant Run Runtime started. Android package is com.example.reynaldo.project1, real application class is null. 
02-16 22:20:48.833 10925-10925/com.example.reynaldo.project1 W/System: ClassLoader referenced unknown path: /data/app/com.example.reynaldo.project1-1/lib/x86 
02-16 22:20:49.066 10925-10925/com.example.reynaldo.project1 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
02-16 22:20:49.328 10925-10968/com.example.reynaldo.project1 I/OpenGLRenderer: Initialized EGL, version 1.4 
02-16 22:20:49.328 10925-10968/com.example.reynaldo.project1 D/OpenGLRenderer: Swap behavior 1 
02-16 22:20:49.348 10925-10968/com.example.reynaldo.project1 E/EGL_emulation: tid 10968: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 
02-16 22:20:49.348 10925-10968/com.example.reynaldo.project1 W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9903de60, error=EGL_BAD_MATCH 

Это код SignUp

public class SignUp extends Activity { 
static final int REQUEST_TAKE_PHOTO = 1; 
String mCurrentPhotoPath; 


DatabaseHelper helper = new DatabaseHelper(this); 

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

public void onSignUpClick (View v){ 
    if (v.getId() == R.id.Bsignupbutton){ 
     EditText email = (EditText) findViewById(R.id.TFemail); 
     EditText pass1 = (EditText) findViewById(R.id.TFpass1); 
     EditText pass2 = (EditText) findViewById(R.id.TFpass2); 

     String emailstr= email.getText().toString(); 
     String pass1str = pass1.getText().toString(); 
     String pass2str = pass2.getText().toString(); 

     if (!pass1str.equals(pass2str)){ 
      Toast pass = Toast.makeText(SignUp.this, "Passwords don't match!", Toast.LENGTH_SHORT); 
      pass.show(); 
     } 

     else{ 
      Contact c = new Contact(); 
      c.setEmail(emailstr); 
      c.setPass(pass1str); 

      helper.insertContact(c); 

     } 


    } 
} 

private File createImageFile() throws IOException { 
    // Create an image file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String imageFileName = "JPEG_" + timeStamp + "_"; 
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
    File image = File.createTempFile(
      imageFileName, /* prefix */ 
      ".jpg",   /* suffix */ 
      storageDir  /* directory */ 
    ); 

    // Save a file: path for use with ACTION_VIEW intents 
    mCurrentPhotoPath = image.getAbsolutePath(); 
    return image; 
} 

private void dispatchTakePictureIntent() { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    // Ensure that there's a camera activity to handle the intent 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     // Create the File where the photo should go 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch (IOException ex) { 
      // Error occurred while creating the File 

     } 
     // Continue only if the File was successfully created 
     if (photoFile != null) { 
      Uri photoURI = FileProvider.getUriForFile(this, 
        "com.example.android.fileprovider", 
        photoFile); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 
     } 
    } 
    } 
} 

Этот это DatabaseHelper:

public class DatabaseHelper extends SQLiteOpenHelper{ 

private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "contacts.db"; 
private static final String TABLE_NAME = "contacts"; 
private static final String COLUMN_EMAIL = "email"; 
private static final String COLUMN_PASS = "pass"; 
private static final String COLUMN_ID = "id"; 
SQLiteDatabase db; 
private static final String TABLE_CREATE = "create table contacts (id integer primary key not null , " + 
     "email text not null, pass text not null);"; 

public DatabaseHelper (Context context){ 

    super (context, DATABASE_NAME, null, DATABASE_VERSION); 
} 


@Override 
public void onCreate(SQLiteDatabase db){ 
    db.execSQL(TABLE_CREATE); 
    this.db = db; 

} 

public void insertContact(Contact c){ 
    db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    String query = "select" + "from contacts"; 
    Cursor cursor = db.rawQuery(query , null); 
    int count = cursor.getCount(); 

    values.put(COLUMN_ID, count); 
    values.put(COLUMN_EMAIL, c.getEmail()); 
    values.put(COLUMN_PASS, c.getPass()); 

    db.insert(TABLE_NAME, null, values); 
    db.close(); 
} 

public String searchPass(String email){ 
    db = this.getReadableDatabase(); 
    String query = "select email, password from " + TABLE_NAME; 
    Cursor cursor = db.rawQuery(query, null); 
    String a, b; 
    b = "not found"; 
    if (cursor.moveToFirst()){ 
     do{ 
      a = cursor.getString(0); 
      b = cursor.getString(1); 

      if(a.equals(email)){ 
       b = cursor.getString(1); 
       break; 
      } 
     } 
     while(cursor.moveToNext()); 
    } 
    return b; 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
    String query = "DROP TABLE IF EXISTS " + TABLE_NAME; 
    db.execSQL(query); 
    this.onCreate(db); 

} 
} 
+0

Пожалуйста, покажите фактический logcat, не просто сказать, что ошибка указывает на –

ответ

0

Сделайте это вместо того, чтобы в классе

private DatabaseHelper helper; 

и переместить инициализацию в OnCreate, где this была установка в Android жизненного цикла

helper = new DatabaseHelper(this); 

Кроме того, запрос неправильно.

String query = "select" + "from contacts"; 

И вы действительно не должны хранить пароли открытым текстом в базе данных, но это не приведет ваше приложение к сбою ...

+0

Не могли бы вы рассказать мне, что не так с запросом? – Geek96

+1

Запустите код в голове. Что вы выбираете? Строка «selectfrom contacts», которая равна 1) неверный sql 2), не выбрав столбцы –

0

Попробуйте это,

public void insertContact(Contact c){ 
     db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 

     String query = "select * from contacts"; 
     Cursor cursor = db.rawQuery(query , null); 
     int count=0; 
     if(cursor!null) 
     { 
     count = cursor.getCount(); 
     } 

     values.put(COLUMN_ID, count); 
     values.put(COLUMN_EMAIL, c.getEmail()); 
     values.put(COLUMN_PASS, c.getPass()); 

     db.insert(TABLE_NAME, null, values); 
     db.close(); 
    } 
+0

'new DatabaseHelper' по-прежнему будет разбивать приложение, где оно находится в вопросе –