2016-08-11 6 views
0

私は構築しているアプリケーションを持っており、登録とログインがあり、メインアプリケーションには2つのテーブルがあります.1つは登録とログイン、もう1つはデータ操作のためのテーブル。ログインを開くとアプリケーションがクラッシュし、サインアップボタンをタップするとクラッシュします。ここでは、データベースのクラスログインボタンをクリックして登録ボタンをクリックするとエラーが表示されます

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

import java.sql.SQLException; 

/** 
* Created by WANDIE on 7/28/2016. 
*/ 

public class DbHelperOperations { 
//this is the class for datbase connectivity 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "persons_name"; 
    public static final String KEY_AGE = "persons_age"; 
    public static final String KEY_SEX = "persons_sex"; 
    public static final String KEY_CONTACT = "persons_contact"; 
    public static final String KEY_CIVIL = "persons_civli_status"; 
    public static final String KEY_WORK = "persons_work"; 
    public static final String KEY_ADDRESS = "persons_address"; 

    //values of the registration login application 

    public static final String COLUMN_ID = "id"; 
    public static final String COLUMN_NAME = "name"; 
    public static final String COLUMN_EMAIL = "email"; 
    public static final String COLUMN_USERNAME = "uname"; 
    public static final String COLUMN_PASSWORD = "pass"; 


    //set up database credentials 
    private static final String DATABASE_NAME = "HotOrNot"; 
    private static final String DATABASE_TABLE = "peopleTable"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String TABLE_NAME = "contacts"; 

    DbHelper ourHelper; 
    private Context ourContext; 
    SQLiteDatabase ourDatabase; 







    public DbHelperOperations(Context ourContext) { 
     this.ourContext = ourContext; 

    } 
    public DbHelperOperations open() throws SQLException{ 
     ourHelper = new DbHelper(ourContext); 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 
    } 
    public void close() 
    { 

     ourHelper.close(); 
    } 

    public void createEntry(Patient patient){//method for createng entry in databse for name and hotness 

//insert the content values to the datbase 
     ContentValues cvs=new ContentValues(); 
     cvs.put(KEY_NAME,patient.getName()); 
     cvs.put(KEY_SEX,patient.getSex()); 
     cvs.put(KEY_AGE,patient.getAge()); 
     cvs.put(KEY_CONTACT,patient.getContact()); 
     cvs.put(KEY_CIVIL,patient.getCiviStatus()); 
     cvs.put(KEY_WORK,patient.getNatureOfWork()); 
     cvs.put(KEY_ADDRESS,patient.getAddress()); 

     ourDatabase.insert(DATABASE_TABLE,null,cvs); 

    } 
//retrieve from database 
    public String getData() { 
     String result=""; 

     String query="SELECT * FROM "+DATABASE_TABLE; 

     Cursor c=ourDatabase.rawQuery(query,null); 


     while(c.moveToNext()){ 
      result+=c.getString(0)+" "+c.getString(1)+" "+c.getString(2)+" "+c.getString(3)+ ""+c.getString(4)+ "" + c.getString(5)+""+ c.getString(6)+""+c.getString(7)+ " \n"; 

     } 
     if(result.equals("")){ 
      return "no data"; 
     } 

     /* 
     for(c.moveToFirst();!c.isAfterLast();c.moveToNext()) 
     { 
      result = result + c.getString(iRow) + " " + c.getString(iname) + " " + c.getString(ihotness) + "\n"; 

     } 
     */ 



     return result; 

    } 

    public String getName(long l) throws SQLException { 

     // String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_HOTNESS}; 
     String str="SELECT * FROM "+DATABASE_TABLE+" WHERE "+KEY_ROWID+"="+l; 

     Cursor c = ourDatabase.rawQuery(str,null); 
     if(c.moveToFirst()) 
     { 

      String name = c.getString(1); 
      return name; 
     } 
     return ""; 

    } 

    public String getHotness(long l)throws java.sql.SQLException { 
     String[] columns = new String[]{ KEY_ROWID, KEY_NAME, }; 
     Cursor c = ourDatabase.query(DATABASE_TABLE,columns,KEY_ROWID + "=" + l,null,null,null,null); 
     if(c.moveToFirst()) 
     { 

      String hotness = c.getString(2); 
      return hotness; 
     } 
     return ""; 

    } 

    public void updateEntry(long lRow, String mName, String mHotness) throws java.sql.SQLException { 
     ContentValues cvUpdate = new ContentValues(); 
     cvUpdate.put(KEY_NAME,mName); 
     cvUpdate.put(KEY_AGE,mHotness); 
     ourDatabase.update(DATABASE_TABLE,cvUpdate,KEY_ROWID + "=" + lRow,null); 


    } 

    public void deleteEntry(long lRow1) throws java.sql.SQLException{ 
     String sql="DELETE FROM "+DATABASE_TABLE+" WHERE "+KEY_ROWID+"="+lRow1; 
     // ourDatabase.delete(DATABASE_TABLE,KEY_ROWID + " =" + lRow1,null); 
     ourDatabase.execSQL(sql); 
    } 

    private static class DbHelper extends SQLiteOpenHelper { 
     public DbHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 



     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      //called when u create a database 
      db.execSQL("CREATE TABLE IF NOT EXISTS " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME + " TEXT NOT NULL, " + KEY_AGE + " INTEGER , " + KEY_SEX + " TEXT NOT NULL, " + KEY_CONTACT + " TEXT NOT NULL, " + KEY_CIVIL + " TEXT NOT NULL, " + KEY_WORK + " TEXT NOT NULL, " + KEY_ADDRESS + " TEXT NOT NULL) "); 
      db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY, " + COLUMN_NAME + " TEXT NOT NULL, " + COLUMN_EMAIL + " TEXT NOT NULL , " + COLUMN_USERNAME + " TEXT NOT NULL, " + COLUMN_PASSWORD + " TEXT NOT NULL) "); 



     } 


     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
//METHOD IS USED WHEN THE DATBASE HAS already been created 
      db.execSQL("DROP TABLE IF EXISTS " +DATABASE_TABLE); 
      onCreate(db); 

      String query = "DROP TABLE IF EXISTS"+TABLE_NAME; 
      db.execSQL(query); 
      this.onCreate(db) ; 


     } 
    } 

    public void insertContact(Contact c) { 
     ourDatabase = ourHelper.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     String query = "SELECT * FROM contacts"; 
     Cursor cursor = ourDatabase.rawQuery(query,null); 
     int count = cursor.getCount(); 
     values.put(COLUMN_ID,count); 
     values.put(COLUMN_NAME,c.getName()); 
     values.put(COLUMN_EMAIL,c.getEmail()); 
     values.put(COLUMN_USERNAME,c.getUname()); 
     values.put(COLUMN_PASSWORD,c.getPass()); 

     //this statement bellow inserts the contact object into the datbase 
     ourDatabase.insert(TABLE_NAME,null,values); 
     ourDatabase.close(); 




    } 

    //database helper method to search for the password 
    public String searchPass(String uname) { 

     ourDatabase = ourHelper.getReadableDatabase(); 
     String query = "SELECT uname,pass FROM "+TABLE_NAME; 
     Cursor cursor = ourDatabase.rawQuery(query,null); 
     String a,b; 
     b = "Not found..."; 
     if (cursor.moveToFirst()) 
     { 
      do { 
       a = cursor.getString(0); 
       if (a.equals(uname)) 
       { 
        b = cursor.getString(1); 
        break; 
       } 
      }while (cursor.moveToNext()); 
     } 


     return b; 
    } 

} 

このため私のコードは、ログインクラス

public class MainLoginReg extends AppCompatActivity implements View.OnClickListener{ 
    EditText editUsername,editPasslogin; 
    Button btnLogin,btnSignup; 
    DatabaseHelper helper = new DatabaseHelper(this); 

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

    btnLogin = (Button)findViewById(R.id.btnLogin); 
    btnSignup = (Button)findViewById(R.id.btnSignup_login); 
    editUsername = (EditText)findViewById(R.id.editUsername_login); 
    editPasslogin = (EditText)findViewById(R.id.editPassword_logiin); 
    btnLogin.setOnClickListener(this); 
    editPasslogin.setOnClickListener(this); 
    editUsername.setOnClickListener(this); 
    btnSignup.setOnClickListener(this); 



} 

@Override 
public void onClick(View view) { 
    switch (view.getId()) 
    { 

     case R.id.btnLogin: 
      //Toast.makeText(MainLoginReg.this,"correct credentials",Toast.LENGTH_SHORT).show(); 

      String str = editUsername.getText().toString(); 
      String pass = editPasslogin.getText().toString(); 
      String password = helper.searchPass(str); 
      if (pass.equals(password)) 
      { 

       Intent openLogin = new Intent(MainLoginReg.this,Display.class); 

       openLogin.putExtra("Username",str); 
       startActivity(openLogin); 

      } 
      else 
      { 
       Toast.makeText(MainLoginReg.this,"Username and passwords don't match ",Toast.LENGTH_SHORT).show(); 
      } 



      break; 
     case R.id.btnSignup_login: 
      Toast.makeText(MainLoginReg.this,"Please signup here",Toast.LENGTH_SHORT).show(); 

       Intent i = new Intent(MainLoginReg.this,Signup.class); 
       startActivity(i); 
        break; 
    } 

} 

}

と登録のためのコードは、あなたがすでに定義

public class Signup extends AppCompatActivity implements View.OnClickListener{ 
    Button signup; 
    EditText editname,editemail,editusername,editpasswd,editConfirmpass; 

    DatabaseHelper helper = new DatabaseHelper(this); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_signup); 

     signup = (Button)findViewById(R.id.btnSignup); 
     editname = (EditText)findViewById(R.id.editName); 
     editemail = (EditText)findViewById(R.id.editEmail); 
     editusername = (EditText)findViewById(R.id.editUsername); 
     editpasswd = (EditText)findViewById(R.id.editPassword); 
     editConfirmpass = (EditText)findViewById(R.id.editConfirmPass); 




     signup.setOnClickListener(this); 
     editname.setOnClickListener(this); 
     editemail.setOnClickListener(this); 
     editusername.setOnClickListener(this); 
     editpasswd.setOnClickListener(this); 
     editConfirmpass.setOnClickListener(this); 



    } 

    @Override 
    public void onClick(View view) { 
     switch (view.getId()) 
     { 
      case R.id.btnSignup: 
       String namestr = editname.getText().toString(); 
       String emailstr = editemail.getText().toString(); 
       String unamestr = editusername.getText().toString(); 
       String pass1str = editpasswd.getText().toString(); 
       String pass2str = editConfirmpass.getText().toString(); 
       if (!pass1str.equals(pass2str)) 
       { 
        Toast.makeText(Signup.this,"Unsuccessful! Passwords dont match",Toast.LENGTH_SHORT).show(); 
       // pass.show(); 
        /*Dialog d = new Dialog(this); 
        d.setTitle("Successful"); 
        TextView tv = new TextView(this); 
        tv.setText("You have created an account"); 
        d.setContentView(tv); 
        d.show();*/ 
       } 
       else 
       { 
        //insert the information in the database 
        Toast.makeText(Signup.this,"Signup Successful",Toast.LENGTH_SHORT).show(); 
        // Intent i = new Intent(Signup.this,) 
        //we use the object of contact class 
        Contact c = new Contact(); 
        c.setName(namestr); 
        c.setEmail(emailstr); 
        c.setUname(unamestr); 
        c.setPass(pass1str); 

        //insert into values db 
        helper.insertContact(c); 

       } 


       break; 
     } 

    } 
} 
+0

logcat – Lino

+0

方法com.example.hacker.nofityme.Signup.access $スーパー 08-11 16投稿してください:57:55.557 19029から19029/com.example.hackerを.nofityme W/dalvikvm:VFY:仮想メソッドを解決できません75:Landroid/app/Activity; .getMediaController()Landroid/media/session/MediaController; 08-11 16:57:55.557 19029-19029/com.example.hacker.nofityme D/dalvikvm:VFY:オペコード0x6fを0x0d4cに置き換えます。 08-11 16:57:55.557 19029-19029/com.example.hacker。 nofityme I/dalvikvm:メソッドcom.example.hacker.nofityme.Signup.accessから参照されるメソッドandroid.app.Activity.getSearchEventを見つけることができませんでした。$ super – wandie

答えて

0

ここにされています_idはテーブルの連絡先にプライマリキーを持っています。あなたはAUTOINCREMENTを使うことができ、inse後に次のIDを取得することはできませんrtContact。

  1. では

    db.execSQL(+ TABLE_NAME + "(" + COLUMN_ID + "NOTが存在する場合は、CREATE TABLE" を "INTEGER PRIMARY KEY AUTOINCREMENTを、" + _id列にテーブル "連絡先" の使用自動インクリメントを作成しますCOLUMN_NAME + "TEXT NOT NULL" + COLUMN_EMAIL + "TEXT NOT NULL" + COLUMN_USERNAME + "TEXT NOT NULL" + COLUMN_PASSWORD + "TEXT NOT NULL");

  2. *連絡先から*を選択してIDを取得しないでください。

  3. 新しい行を挿入する前にidを入れないでください。

    public void insertContact(Contact c){ ourDatabase = ourHelper.getWritableDatabase();

    ContentValues values = new ContentValues(); 
    values.put(COLUMN_NAME,c.getName()); 
    values.put(COLUMN_EMAIL,c.getEmail()); 
    values.put(COLUMN_USERNAME,c.getUname()); 
    values.put(COLUMN_PASSWORD,c.getPass()); 
    
    //this statement bellow inserts the contact object into the datbase 
    ourDatabase.insert(TABLE_NAME,null,values); 
    ourDatabase.close(); 
    

    }

+0

私はあなたにうまくやっていませんでした。 – wandie

+0

Ok ... you coud use: "+ COLUMN_ID +" INTEGERプライマリ・キー・オートインクレメント、 "+ COLUMN_NAME +" TEXTがNULLでない、 "+ COLUMN_EMAIL +" TEXTがNULLでない、 "+ COLUMN_USERNAME +" TEXT NULLではなく、 "+ COLUMN_PASSWORD +" TEXT NOT NULL) "); –

+0

私はすでに回答を編集しました –

関連する問題