繁体   English   中英

Android sqlite中的空指针异常

[英]Null pointer exception in android sqlite

我是android新手,正在创建一个由注册对话框和sqlite存储组成的android应用程序。但是在这里,我遇到了空指针异常。我没有发现任何错误,但显示了空指针异常。 2小时以来的代码

在这里,我使用了从此处下载的自定义按钮fin警报对话框。这是我的活动,显示警报对话框并注册到数据库中

       package com.developer.milanandroid;

import java.io.File;
import java.util.ArrayList;

import com.milan.lib.progressgenarator.lib.ProgressGenerator;
import com.milan.lib.progressgenarator.lib.ProgressGenerator.OnCompleteListener;
import com.milan.paperbuttons.adminsettingsbuttons;
import com.milan.paperbuttons.ShowDatabase;
import com.milan.validation.lib.RegExpressionValueValidator;
import com.milan.validation.lib.ValidationManager;
import com.processbutton.lib.milan.ActionProcessButton;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class AdminSettings extends Activity implements OnCompleteListener{

    public LoginDataBaseAdapter logindatabase_adapter_child;
//  public  SQLiteDatabase db;
    Button Review;
    TextView text_fetched_database_results;
    String username,password;
    Cursor c;

    adminsettingsbuttons review,fetch_database,adduser;
    MediaPlayer media_player;
    private ArrayList<String> USER_NAME = new ArrayList<String>();
    private ArrayList<String> USER_PWD = new ArrayList<String>();
    Dialog database_list;
    DataBaseHelper database_helper_child;
    File Milan,Sample;

    //-----------------------RegistrationDialog variables--------------------------------//
    com.milan.material.widgets.dialog.FloatingEditText username_dialog,password_dialog,confirm_password;
    Dialog registration_dialog;
    private ValidationManager validation_manager;
    CheckBox show_password;
    public ActionProcessButton Registerbutton,clear_Button;
    LoginDataBaseAdapter logindatabaseadapter;
    String  dialog_user_name_string,dialog_pasword_string,dialog_confirm_string;
    int username_length=5,password_length=5;
    String stored_pass;





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



        fetch_database = (adminsettingsbuttons)findViewById(R.id.Button_Fetch_from_Database);
        fetch_database.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                    Intent database_list = new Intent(AdminSettings.this,DatabaseListView.class);
                    startActivity(database_list);
                }
        });

        review = (adminsettingsbuttons)findViewById(R.id.button_review);
        review.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                //String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
                //Milan = new File(extStorageDirectory+"/Milan");
                //if(!Milan.exists()){

                //  Milan.mkdir();

                    /*media_player = new MediaPlayer(AdminSettings.this,)
                    media_player.start();*/
                    //}
                    //Sample = new File(extStorageDirectory+"/Milan/Sample.txt");
                //  try {
                //      Sample.createNewFile();
                //  } catch (IOException e) {
                        // TODO Auto-generated catch block
                //      e.printStackTrace();
                //  }
                Intent review = new Intent(getApplicationContext(),Review.class);
                startActivity(review);

            }
        });


        adduser= (adminsettingsbuttons)findViewById(R.id.button_Adduser);
        adduser.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                registration_dialog = new Dialog(AdminSettings.this);
                registration_dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON);
                registration_dialog.setContentView(R.layout.registrationdialog);
                registration_dialog.setTitle("User Registration");
                registration_dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.user);


                username_dialog = (com.milan.material.widgets.dialog.FloatingEditText)registration_dialog.findViewById(R.id.edt_dialog_username);
                password_dialog = (com.milan.material.widgets.dialog.FloatingEditText)registration_dialog.findViewById(R.id.edt_dialog_password);
                confirm_password = (com.milan.material.widgets.dialog.FloatingEditText)registration_dialog.findViewById(R.id.edt_dialog_confirm_password);

                validation_manager = new ValidationManager(AdminSettings.this); 
                        /*-----------------For validating each username and password fields in the registration dialog----------------------*/

                validation_manager.add("", new RegExpressionValueValidator(username_dialog, "^[a-zA-Z0-9\\-'\\s]{3,}$", "Please enter your user name"));
                validation_manager.add("", new RegExpressionValueValidator(password_dialog, "^[a-zA-Z0-9\\-'\\s]{3,}$", "Please enter your password"));
                validation_manager.add("", new RegExpressionValueValidator(confirm_password, "^[a-zA-Z0-9\\-'\\s]{3,}$","Please enter confirm password"));

                      /*-------------------For viewing passwords on clicking show passwords checkbox-------------------------------------------*/

                show_password = (CheckBox)registration_dialog.findViewById(R.id.show_password);
                show_password.setOnCheckedChangeListener(new OnCheckedChangeListener() 
                {

                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if(!isChecked)
                        {
                        password_dialog.setTransformationMethod(PasswordTransformationMethod.getInstance());
                        confirm_password.setTransformationMethod(PasswordTransformationMethod.getInstance());   
                        }
                        else
                        {
                            password_dialog.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                            confirm_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                        }

                    }
                });

                        /*-----------------------Progress generator of register button------------------------------------*/

                final ProgressGenerator progressGenerator = new ProgressGenerator(AdminSettings.this);
                Registerbutton = (ActionProcessButton)registration_dialog.findViewById(R.id.Btn_Register);
                Registerbutton.setMode(ActionProcessButton.Mode.ENDLESS);
                Registerbutton.setOnClickListener(new View.OnClickListener() 
                {
                    @Override
                    public void onClick(View v) 
                    {
                        int a,b,c;  
                         dialog_user_name_string = username_dialog.getText().toString();
                         dialog_pasword_string = password_dialog.getText().toString();
                         dialog_confirm_string = confirm_password.getText().toString();
                         //dialog_seq_answer = seq_answer.getText().toString();
                        if((!dialog_user_name_string.equals("")) &&(!dialog_pasword_string.equals("")) && (!dialog_confirm_string.equals(""))){

                            a= dialog_user_name_string.length();
                            b= dialog_pasword_string.length();
                            c= dialog_confirm_string.length();

                            if((a<=username_length) && (b<=password_length) && (c<=password_length)){

                                    Toast.makeText(AdminSettings.this, "Sorry,Username and password length must be greater than 5 characters", Toast.LENGTH_LONG).show();
                                    media_player = MediaPlayer.create(AdminSettings.this, R.raw.usernameandpasswordlength);
                                    media_player.start();
                                }
                             else{
                                    stored_pass = logindatabaseadapter.checkSinlgeEntry(dialog_user_name_string);
                                    if(!stored_pass.equals("NOT EXIST")){

                                        if(dialog_pasword_string.equals(dialog_confirm_string)){

                                         logindatabaseadapter.insertEntry(dialog_user_name_string, dialog_pasword_string); //Inserting username and password into the database
                                         progressGenerator.start(Registerbutton);
                                         Registerbutton.setEnabled(false);
                                         media_player= MediaPlayer.create(AdminSettings.this, R.raw.regesteringintodatabase);
                                         media_player.start();
                                         username_dialog.setEnabled(false);
                                         password_dialog.setEnabled(false);
                                         confirm_password.setEnabled(false);
                                         //registration_dialog.setCancelable(false);
                                        }
                                        else{

                                             media_player= MediaPlayer.create(AdminSettings.this, R.raw.databasepasswordsnotmatched);
                                             media_player.start();
                                             Toast.makeText(AdminSettings.this, "Passwords did not matched please try again", Toast.LENGTH_LONG).show();

                                            }   
                                    }
                             } 
                        }

                        else {  
                                    /*------------------Calling for validation---------------------------*/
                            validation_manager.validateAllAndSetError();
                            Toast.makeText(AdminSettings.this, "please fill all the fields", Toast.LENGTH_LONG).show();
                            media_player= MediaPlayer.create(AdminSettings.this, R.raw.pleasefilallthedetails);
                            media_player.start();
                        }

                    }   


                });




                clear_Button = (ActionProcessButton)registration_dialog.findViewById(R.id.Btn_Clear);
                clear_Button.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {

                                username_dialog.setText("");
                                password_dialog.setText("");
                                confirm_password.setText("");

                    }
                });


                registration_dialog.show();

            }
        });

    }   

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.admin_settings, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }





    @Override
    public void onComplete() {
        Toast.makeText(AdminSettings.this, "Account created succesfully"+" "+dialog_user_name_string,Toast.LENGTH_LONG).show();
        media_player= MediaPlayer.create(AdminSettings.this, R.raw.congratulationsdb);
        media_player.start();


    }



}

Logindatabase适配器:

package com.developer.milanandroid;

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

public class LoginDataBaseAdapter 
{
        //Database name
        static final String DATABASE_NAME = "MilanloginRegistration.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.
        public static final String TABLE_NAME="MilanLoginregistration";
        public static final String ID="_id";
        public static final String USER_NAME="USERNAME";
        public static final String USER_PASSWORD ="PASSWORD";


        static final String DATABASE_CREATE = "create table "+ TABLE_NAME +
                                     "( " +ID+" integer primary key autoincrement,"+"USERNAME text not null,"+USER_PASSWORD+" text not null); ";
        // 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 LoginDataBaseAdapter opentoRead() throws android.database.SQLException{

            dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
            db = dbHelper.getReadableDatabase();
            return this;
        }
        public LoginDataBaseAdapter opentoWrite() throws android.database.SQLException{

            dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
            db = dbHelper.getWritableDatabase();
            return this;
        }

        public void Close(){
            dbHelper.close();
        }


        public void insertEntry(String username,String password)
        {
           ContentValues newValues = new ContentValues();

            newValues.put("USERNAME",username);
            newValues.put("PASSWORD",password);

            // Insert the row into your table
            db.insert("MilanLoginregistration",null,newValues);
            ///Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show();
        }


        public int deleteAll(){
            return db.delete(TABLE_NAME, null, null);
        }

        public void deleteEntry(int id){
            //String id=String.valueOf(ID);
            db.delete(TABLE_NAME, ID+"="+id, null);
           // Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show();

        }

        public Cursor queue_all(){
            String[] columns = new String[]{ID,"USERNAME","PASSWORD"};
            Cursor cursor_queue_all =db.query(TABLE_NAME, columns, null, null, null, null, null);
            return cursor_queue_all;
        }

        public Cursor feching_Data(){

            String[] columns = {ID,USER_NAME,USER_PASSWORD};
            db = dbHelper.getWritableDatabase();
            Cursor cursor = db.query(TABLE_NAME, columns,null,null,null,null,null);
            return cursor;

        }
        public String getSinlgeEntry(String userName)
        {
            Cursor cursor=db.query("MilanLoginregistration", 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 String checkSinlgeEntry(String userName)
        {
            Cursor cursor=db.query("MilanLoginregistration", null, " USERNAME=?", new String[]{userName}, null, null, null);
            if(cursor.getCount()>=1) // UserName  Exist
            {
                cursor.close();
                return "EXIST";
            }
           // cursor.close();
            return "";              
        }
        public void  updateEntry(String user_name,String pasword)
        {
            // Define the updated row content.
            ContentValues updatedValues = new ContentValues();
            // Assign values for each row.  
            updatedValues.put("USERNAME", user_name);
            updatedValues.put("PASSWORD",pasword);


            String where="USERNAME = ?";
            db.update("MilanLoginregistration",updatedValues, where, new String[]{user_name});             
        }   
        /*public void Display(View v){
            Cursor c = db.rawQuery("select * from MilanloginRegistration", null);
            admin_settings_child.text_fetched_database_results.setText("");
            c.moveToFirst();
            do{
                String username = c.getString(c.getColumnIndex("USERNAME"));
                String password = c.getString(1);
                admin_settings_child.text_fetched_database_results.append("USERNAME::-->"+username+"PASSWORD::-->"+password+"\n");

            }while(c.moveToNext());
        }*/
    }

这是我的日志

01-02 05:05:03.100: E/AndroidRuntime(18345): FATAL EXCEPTION: main
01-02 05:05:03.100: E/AndroidRuntime(18345): Process: com.developer.milanandroid, PID: 18345
01-02 05:05:03.100: E/AndroidRuntime(18345): java.lang.NullPointerException
01-02 05:05:03.100: E/AndroidRuntime(18345):    at com.developer.milanandroid.AdminSettings$3$2.onClick(AdminSettings.java:187)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at android.view.View.performClick(View.java:4438)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at android.view.View$PerformClick.run(View.java:18422)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at android.os.Handler.handleCallback(Handler.java:733)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at android.os.Looper.loop(Looper.java:136)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at android.app.ActivityThread.main(ActivityThread.java:5017)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at java.lang.reflect.Method.invokeNative(Native Method)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at java.lang.reflect.Method.invoke(Method.java:515)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-02 05:05:03.100: E/AndroidRuntime(18345):    at dalvik.system.NativeStart.main(Native Method)

您试图在显示对话框之前从对话框中获取以下内容:

username_dialog = (com.milan.material.widgets.dialog.FloatingEditText)registration_dialog.findViewById(R.id.edt_dialog_username);
password_dialog = (com.milan.material.widgets.dialog.FloatingEditText)registration_dialog.findViewById(R.id.edt_dialog_password);
confirm_password = (com.milan.material.widgets.dialog.FloatingEditText)registration_dialog.findViewById(R.id.edt_dialog_confirm_password);

在显示对话框之后尝试获取这些视图,或者只是将R.layout.registrationdialog膨胀为视图对象,然后使用该视图对象而不是registration_dialog

您尚未定义logindatabaseadapter变量。

当您调用logindatabaseadapter.checkSinlgeEntry(...)时,此时将获得NullPointerExceptionlogindatabaseadapter = null

您将需要添加logindatabaseadapter = new LoginDataBaseAdapter(this)onCreate

感谢@Ed George发布答案我通过初始化数据库找到答案并打开它

logindatabaseadapter = new Logindatabaseadapter();
logindatabaseadapter.open();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM