2016-04-29 6 views
0

私はアンドロイドスタジオとsqliteデータベースに初心者、私はGmailのログインのようなアプリケーションのログインページを開発しています。ここで私はプライマリキーとしてユーザーの電話番号を取得しています。ユーザーが自分の電話番号を入力すると、既に存在する場合はパスワード画面にリダイレクトされます。私は電話番号が既に存在するかどうかをチェックする方法を知らない。 これは私のコードです。電話番号が既に存在するかどうかを確認する方法がわかりません。私はちょうど初心者で、私は今何をすべきかわからない

PhoneNumber.java

package com.hernaezchristophergmail.projectitrack; 


    import android.app.Activity; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.database.Cursor; 
    import android.database.sqlite.SQLiteDatabase; 
    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 PhoneNumber extends AppCompatActivity { 

     EditText Pnum; 
     Button Con; 
     UserDBHelper userDBHelper; 
     SQLiteDatabase sqLiteDatabase; 
     Context context = this; 

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

      Pnum = (EditText) findViewById(R.id.tbPnumber); 
      Con = (Button) findViewById(R.id.btbCon); 

      Con.setOnClickListener(new View.OnClickListener(){ 
       @Override 

        public void onClick(View v){ 
        String pnumber = Pnum.getText().toString().trim(); 



        String storedPassword = UserDBHelper.getSingleEntry(pnumber,sqLiteDatabase); 
        /* if(pnumber.equals("")||pnumber1.equals("")){ 
         Toast.makeText(PhoneNumber.this, "Please", Toast.LENGTH_LONG).show(); 
         return; 
        }*/ 

        if(!pnumber.equals(storedPassword)){ 
         Toast.makeText(PhoneNumber.this, "Invalid Login details", Toast.LENGTH_LONG).show(); 
         return; 
        } 
        else{ 
         Intent intent = new Intent(PhoneNumber.this,PasswordScreen.class); 
           startActivity(intent); 
        } 
       } 
      }); 
     } 

     /* public void add(View view){ 
      String pnumber = Pnum.getText().toString(); 

      Intent intent = new Intent(PhoneNumber.this, PasswordScreen.class); 
      startActivity(intent); 

     } 
     */ 

     public void create(View view) { 
      Intent intent = new Intent(PhoneNumber.this, SignUp.class); 
      startActivity(intent); 
     } 

     @Override 
     public void onBackPressed(){ 

     } 
    } 

UserDBHelper.java

package com.hernaezchristophergmail.projectitrack; 

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

    /** 
    * Created by Christopher on 4/26/2016. 
    */ 
    public class UserDBHelper extends SQLiteOpenHelper { 

     private static final String DATABASE_NAME = "ITRACK_USER.DB"; 
     private static final int DATABASE_VERSION = 1; 


     private static final String CREATEINFO_QUERY= 
       "CREATE TABLE "+ UserContact.UserInformation.TABLE_NAME+"("+ UserContact.UserInformation.User_Password+" TEXT," + 
         UserContact.UserInformation.User_PhoneNumber+" TEXT," + UserContact.UserInformation.User_Firstame+" TEXT," + UserContact.UserInformation.User_LastName+" TEXT);"; 

     public UserDBHelper(Context context){ 

      super(context,DATABASE_NAME,null,DATABASE_VERSION); 
      Log.e("DATABASE OPERATIONS","DATABASE CREATED/OPENED ..."); 

     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(CREATEINFO_QUERY); 
      Log.e("DATABASE OPERATION", "TABLE CREATED ..."); 

     } 


     public void saveInfo(String first,String last,String pnum, String pass, SQLiteDatabase db){ 
      ContentValues contentvalues = new ContentValues(); 
      contentvalues.put(UserContact.UserInformation.User_Firstame,first); 
      contentvalues.put(UserContact.UserInformation.User_LastName,last); 
      contentvalues.put(UserContact.UserInformation.User_PhoneNumber,pnum); 
      contentvalues.put(UserContact.UserInformation.User_Password,pass); 

      db.insert(UserContact.UserInformation.TABLE_NAME, null, contentvalues); 
      Log.e ("Database Operation", "one row inserted . . ."); 
     } 

     public static String getSingleEntry(String pnum, SQLiteDatabase sqLiteDatabase) { 
      Cursor cursor = sqLiteDatabase.query(UserContact.UserInformation.TABLE_NAME, null, " User_PhoneNumber=?", 
        new String[] { pnum }, null, null, null); 
      if (cursor.getCount() < 1) { 
       cursor.close(); 
       return "NOT EXIST"; 
      } 
      cursor.moveToFirst(); 
      String phonenum = cursor.getString(cursor.getColumnIndex("password")); 
      cursor.close(); 
      return phonenum; 
     } 


     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     } 
    } 

UserContact.java

public class UserContact { 

    public static abstract class UserInformation{ 
     public static final String TABLE_NAME = "info"; 
     public static final String User_Password= "password"; 
     public static final String User_LastName = "last_name"; 
     public static final String User_Firstame = "first_name"; 
     public static final String User_PhoneNumber = "phone_number"; 
     public static final String PHOTOID = "photo_id"; 
    } 
} 

答えて

0

エラーとは何ですか? また、これを調べてください。クエリ内の

public static String getSingleEntry(String pnum, SQLiteDatabase sqLiteDatabase) { 
      Cursor cursor = sqLiteDatabase.query(UserContact.UserInformation.TABLE_NAME, null, " User_PhoneNumber=?", 
        new String[] { pnum }, null, null, null); 
      if (cursor.getCount() < 1) { 
       cursor.close(); 
       return "NOT EXIST"; 
      } 
      cursor.moveToFirst(); 
      String phonenum = cursor.getString(cursor.getColumnIndex("password")); 
      cursor.close(); 
      return phonenum; //RETURN YES/NO if exist not the actual password for security purpose. 
     } 

if(!pnumber.equals(storedPassword)){ //ALSO HERE, return YES/NO if exist or new, not the actual password. 
         Toast.makeText(PhoneNumber.this, "Invalid Login details", Toast.LENGTH_LONG).show(); 
         return; 
        } 
+0

私はまだそれを手に入れません。 – chrys

+0

まだ次の画面に行くことができません – chrys

+0

エラーを共有できますか?データベースへのクエリがDBに正常に送信されていることを確認してください。 –

0

エラー
1.間違った列名User_PhoneNumberは決してあなたのテーブルに存在しません。以下のようにクエリを書く

Cursor cursor = sqLiteDatabase.query(UserContact.UserInformation.TABLE_NAME, null, UserContact.UserInformation.User_PhoneNumber+"=?", 
        new String[] { pnum }, null, null, null); 

2.間違った列名:)あなたは...

String phonenum = cursor.getString(cursor.getColumnIndex(UserContact.UserInformation.User_PhoneNumber)); 

代わりの

String phonenum = cursor.getString(cursor.getColumnIndex("password")); 

hapyyCoding書く代わりに電話番号のパスワードを読んでいます;

+0

imあなたは私のPhoneNumber。javaが正しいと思いますか? – chrys

+0

このオブジェクト 'phonenum'の値を確認してください。 – Bharatesh

0

以下のメソッドは、指定された番号の名前を返します。このようにして、番号が使用可能かどうかをトリガーできます。数値がそこにある場合はtrueを返し、そうでない場合はfalseを返します。

public Boolean numberExists(Context context, String phoneNumber) { 
     String contactName = null; 
     ContentResolver resolver = context.getContentResolver(); 
     Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 
     Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Contacts.DISPLAY_NAME}, null, null, null); 
     try { 

      if (cursor != null) { 
       if (cursor.moveToFirst()) { 
        return true; 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (cursor != null && !cursor.isClosed()) { 
       cursor.close(); 
      } 
     } 
     return false; 
    } 
+0

コードはどこに置くべきですか?どの部分ですか? – chrys

+0

@chrys ::これは別の方法ですこれをコードスニペットに入れて、利用可能性をチェックしなければならない番号を送信することができます。 – Jeevanandhan

関連する問題