5

I am creating an android application that consists of registration form using sqlite database and forgot password field after clicking forgot password field security check to show password with reset button.When i click the reset password field it is showing the bind value at index 1 is null please help me to fix this.This is my activity code after clicking of forgot filed:

 forgot_reset = (ButtonFlat)forgot_dialog.findViewById(R.id.dialog_button_Reset_forgot);
                    forgot_reset.setOnClickListener(new View.OnClickListener() 
                    {

                        @Override
                        public void onClick(View v) 
                        {
                            String stored_sec_hint = loginDataBaseAdapter.getSinlgeEntry(dialog_seq_answer);
                            if(confirm_sec_hint_forgot.equals(""))
                            {
                                Toast.makeText(Login_Page.this, "Please enter your security hint to proceed", Toast.LENGTH_LONG).show();
                            }
                            else
                            {
                                if(stored_sec_hint==null)
                                {
                                    Toast.makeText(Login_Page.this, "Please Enter correct security hint to proceed", Toast.LENGTH_LONG).show();
                                }
                                else
                                {
                                    show_pwd.setText(stored_pass);
                                }
                            }
                        }
                    });

                    forgot_dialog.show();
            }

        });

This is my DB adapter class:

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

public class LoginDataBaseAdapter 
{
        static final String DATABASE_NAME = "login.db";
        static final int DATABASE_VERSION = 1;
        public static final int NAME_COLUMN = 1;
        // TODO: Create public field for each column in your table.
        // SQL Statement to create a new database.
        static final String DATABASE_CREATE = "create table "+"LOGIN"+
                                     "( " +"ID"+" integer primary key autoincrement,"+"USERNAME  text UNIQUE,PASSWORD text,SECHINT text); ";
        // Variable to hold the database instance
        public  SQLiteDatabase db;
        // Context of the application using the database.
        private final Context context;
        // Database open/upgrade helper
        private DataBaseHelper dbHelper;
        public  LoginDataBaseAdapter(Context _context) 
        {
            context = _context;
            dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        public  LoginDataBaseAdapter open() throws SQLException 
        {
            db = dbHelper.getWritableDatabase();
            return this;
        }
        public void close() 
        {
            db.close();
        }

        public  SQLiteDatabase getDatabaseInstance()
        {
            return db;
        }

        public void insertEntry(String dialog_user_name_string,String dialog_pasword_string,String dialog_seq_answer)
        {
           ContentValues newValues = new ContentValues();

            newValues.put("USERNAME", dialog_user_name_string);
            newValues.put("PASSWORD",dialog_pasword_string);
            newValues.put("SECHINT", dialog_seq_answer);
            // Insert the row into your table
            db.insert("LOGIN", null, newValues);
            ///Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show();
        }
        public int deleteEntry(String dialog_pasword_string)
        {
            //String id=String.valueOf(ID);
            String where="USERNAME=?";
            int numberOFEntriesDeleted= db.delete("LOGIN", where, new String[]{dialog_pasword_string}) ;
           // Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
            return numberOFEntriesDeleted;
        }   
        public String getSinlgeEntry(String userName)
        {
            Cursor cursor=db.query("LOGIN", null, " USERNAME=?", new String[]{userName}, null, null, null);
            if(cursor.getCount()<1) // UserName Not Exist
            {
                cursor.close();
                return "NOT EXIST";
            }
            cursor.moveToFirst();
            String password= cursor.getString(cursor.getColumnIndex("PASSWORD"));
            cursor.close();
            return password;                
        }
        public void  updateEntry(String forgot_new_password_string)
        {
            // Define the updated row content.
            ContentValues updatedValues = new ContentValues();
            // Assign values for each row.
            //updatedValues.put("USERNAME", dialog_user_name_string);
            updatedValues.put("PASSWORD",forgot_new_password_string);


            String where="PASSWORD = ?";
            db.update("LOGIN",updatedValues, where, new String[]{forgot_new_password_string});             
        }       
}

This is my logcat:

02-17 18:24:02.590: E/AndroidRuntime(29035): FATAL EXCEPTION: main
    02-17 18:24:02.590: E/AndroidRuntime(29035): Process: com.medequip.c1testpanel, PID: 29035
    02-17 18:24:02.590: E/AndroidRuntime(29035): java.lang.IllegalArgumentException: the bind value at index 1 is null
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1339)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1186)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1057)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1225)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at com.medequip.c1testpanel.LoginDataBaseAdapter.getSinlgeEntry(LoginDataBaseAdapter.java:65)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at com.medequip.c1testpanel.Login_Page$2$1.onClick(Login_Page.java:144)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at com.gc.materialdesign.views.ButtonFlat.onDraw(ButtonFlat.java:83)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.draw(View.java:14728)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13588)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13635)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13509)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13635)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13509)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13635)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13509)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13635)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13509)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13635)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13509)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.View.getDisplayList(View.java:13635)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1627)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1506)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2722)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2587)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2210)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1189)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6223)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.Choreographer.doCallbacks(Choreographer.java:591)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.Choreographer.doFrame(Choreographer.java:560)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.os.Handler.handleCallback(Handler.java:808)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.os.Handler.dispatchMessage(Handler.java:103)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.os.Looper.loop(Looper.java:193)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at android.app.ActivityThread.main(ActivityThread.java:5292)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at java.lang.reflect.Method.invokeNative(Native Method)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at java.lang.reflect.Method.invoke(Method.java:515)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
    02-17 18:24:02.590: E/AndroidRuntime(29035):    at dalvik.system.NativeStart.main(Native Method)
Sundeep
  • 81
  • 1
  • 3
  • 12

2 Answers2

11

it simple says that the value you are passing in selectionArgs is null.make sure passed value is not null.Please check for username Variable's value before executing this query

if(userName!=null){
    Cursor cursor=db.query("LOGIN", null, " USERNAME=?", new String[]{userName}, null, null, null);
}

inside getSinlgeEntry(String userName) method.Hope it helps.

Nirav Tukadiya
  • 3,367
  • 1
  • 18
  • 36
  • 4
    what if I want to put null? – Cyph3rCod3r Oct 30 '18 at 07:52
  • @Dr.aNdRO Refer to [this](https://stackoverflow.com/questions/14175233/how-to-search-for-null-in-android-database-query-or-statement-in-selection) for a solution for querying null columns. – mahdi Sep 26 '20 at 14:45
1

Did you try without the leading space in your where condition?

    public String getSinlgeEntry(String userName)
    {
        Cursor cursor=db.query("LOGIN", null, "USERNAME=?", new String[]{userName}, null, null, null);
        if(cursor.moveToFirst())
        {
            return cursor.getString(cursor.getColumnIndex("PASSWORD"));
        }
        cursor.close();
        return "NOT EXIST";        
    }
Gorcyn
  • 2,807
  • 1
  • 20
  • 22