2016-03-31 14 views
-4
package com.example.chris.thegiver; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class LogIn extends AppCompatActivity implements View.OnClickListener { 
    private Button btnRegister2, btnLogIn; 
    private EditText etUser, etPass; 

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

     btnRegister2 = (Button) findViewById(R.id.btnRegister2); 
     btnLogIn= (Button) findViewById(R.id.btnLogIn); 

     btnRegister2.setOnClickListener(this); 

    } 

Sanırım sorunum burası. Uygulamaya veritabanına hiç erişmiyor ve giriş yapmak için kullanıcı adı parola ile eşleşip eşleşmediğini kontrol etmem gerekiyor. Eğer parola == kullanıcı adı ise kullanıcının oturum açmasına izin verecektir. Ne yazık ki bu olmuyor.Kullanıcı adı ve parolayı bir veritabanında depolamaya çalışmak ve kullanıcı adı ve parolanın eşleşip eşleşmediğini kontrol etmek için

@Override 
    public void onClick(View v) { 
     if(v.getId() == R.id.btnRegister2){ 
      startActivity(new Intent(LogIn.this, RegisterActivity.class)); 
     } 
     if(v.getId() == R.id.btnLogIn){ 
      EditText a = (EditText) findViewById(R.id.etUser); 
      String str = a.getText().toString(); 
      EditText b = (EditText) findViewById(R.id.etPass); 
      String pass = b.getText().toString(); 
      String password = helper.searchPass(str); 
      if(pass.equals(password)){ 
       Intent i = new Intent(LogIn.this,HomeActivity.class); 
       i.putExtra("Username: ", str); 
       startActivity(i); 
      } 
      else{ 
       Toast temp = Toast.makeText(LogIn.this, "Username and Password dont match!", Toast.LENGTH_SHORT); 
       temp.show(); 
      } 

     } 
    } 
} 

VERİTABANI SINIF

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 COL_ID = "id"; 
    private static final String COL_NAME= "name"; 
    private static final String COL_EMAIL= "email"; 
    private static final String COL_USERNAME= "username"; 
    private static final String COL_PASSWORD= "password"; 
    SQLiteDatabase db; 
    private static final String TABLE_CREATE = "create table contacts (id integer primary key not null, name text not null," + 
      "email text not null, username text not null, password 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; 

    } 

Bu yöntem veritabanına işlevsellik vermek ve yeni bir kullanıcı nesnesi

public void insertContact(Contact c){ 
     db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     // * means all values 
     String query = "select * from contacts"; 
     Cursor cursor = db.rawQuery(query,null); 
     int count = cursor.getCount(); 

     values.put(COL_ID, count); 
     values.put(COL_NAME,c.getName()); 
     values.put(COL_EMAIL, c.getEmail()); 
     values.put(COL_USERNAME, c.getUsername()); 
     values.put(COL_PASSWORD, c.getPassword()); 

     **// this will insert the contact object into the database** 
     db.insert(TABLE_NAME, null, values); 
     db.close(); 
    } 

herşey gidiyor olabilir Burası yöntemdir oluşturulduğunda bir kullanıcılara bilgi eklemek yanlış bu kullanıcı adı için veritabanını arar ve kullanıcı adı parola eşit olup olmadığını denetler. o zaman isnt ise b Bu kullanıcı adları tüm bilgileri veritabanına gönderir ekrana

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

       if(a.equals(uname)){ 
        b = cursor.getString(1); 
        break; 
       }enter code here 
      } 
      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); 

    } 
} 

KAYIT SINIFI için basılacaktır.

Parola eşittir onaylıyorsa, yukarıda oluşturulan java sqlite veritabanındaki her şeyi depolayın.
Parola ve onaylama parolası eşleşmiyorsa, parolaların eşleşmediğini belirten bir toast iletisi görünecektir.

  if (password.equalsIgnoreCase(confirm)) { 
       Contact c = new Contact(); // Uses the contact class created earlier 
       c.setName(name); 
       c.setEmail(email); 
       c.setUsername(user); 
       c.setPassword(password); 

       registerDB.insertContact(c); 
       startActivity(new Intent(RegisterActivity.this,LogIn.class)); 
      } 
      else { 
       // Pop up message 
       Toast pass = Toast.makeText(RegisterActivity.this, "Passwords Dont Match!", Toast.LENGTH_SHORT); 
       pass.show(); 
      } 

     } 
    } 
+3

neler var Soru – robotlos

+0

'' burada '' searchPass() '' in içine kod girer, ya da ..? – BadCash

+0

Maalesef hiçbir şey oturum açmaya çalıştığınızda HomeScreenActivity başlatılamıyor ve giriş kodu yok burada olması gerekiyordu çünkü LogIn sınıfında LogIn ve DataBase sınıfında problem olduğunu düşünüyorum. DataBaseHelper sınıfında olması ve sorunun arama yöntemi içinde kaldığını düşünüyorum. – Chris

cevap

0

Android Eğer veritabanından veri erişebilir bu sınıfı kullanarak doğrudan SQLiteDatabase sınıfını sağlayan gerek böyle bir tablo oluşturun DatabaseHelper sınıfını

SQLiteDatabase db=openOrCreateDatabase("avishbarcodes.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); 
      db.setLocale(Locale.getDefault()); 

yazmak için ..

  String createtable="CREATE TABLE IF NOT EXISTS eannumbers(_id INTEGER PRIMARY KEY AUTOINCREMENT,count NUMBER,ean_no TEXT)"; 
     db.execSQL(createtable); 

Veritabanından gelen değerleri buradan okuyun.

böyle sütun değerleri erişmezler ..

cursor.getString (1);

bu yolu onun daha iyi bir yol izleyin ..

c.getString (c.getColumnIndex ("ean_no"));

kullanıcı bu

btn_login.setOnClickListener gibi giriş düğmesi denetimi tıkladığınızda (yeni OnClickListener() {

 @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

        String selectquery= "select * from login"; 
       Cursor c=db.rawQuery(selectquery, null); 
         if(c==null){ 
         }else if(c.getCount()<=0){ 
         }else{ 
          while(c.moveToNext()){ 

       String email=c.getString(c.getColumnIndex("emailid")); 
       String pwd=c.getString(c.getColumnIndex("pwd")); 

           } 
          c.close(); 
          } 

      } 
     }); 

.. işe yarayacak böyle etmeyin ...

İlgili konular