база данных создана?кнопка входа ничего не делает. AndroidStudio, sqlite - PullRequest
0 голосов
/ 04 июня 2019

Извините за мой английский. Я создал простое приложение журнала и реестра с базой данных. если я регистрирую пользователя, мне нужно войти в систему, и приложение переносит меня на другой экран. проблема не в том, что при создании логов кнопка входа в систему абсолютно ничего не делает

MainActivity.java

public class MainActivity extends AppCompatActivity {
    Button registrar;
    Button iniciar;
    BaseDatos bd = new BaseDatos(this, "bd1", null, 1);

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

        registrar = (Button) findViewById(R.id.registro);
        registrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent m = new Intent(getApplicationContext(), Registrar.class);
                startActivity(m);
            }
        });
        iniciar = (Button) findViewById(R.id.iniciar);
        iniciar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText editText = (EditText) findViewById(R.id.editText);
                EditText editText1 = (EditText) findViewById(R.id.editText2);
                try {
                    Cursor cursor = bd.check(editText.getText().toString(), editText1.getText().toString());
                    if (cursor.getCount() > 0) {
                        Intent m = new Intent(getApplicationContext(), Musica.class);
                        startActivity(m);
                    } else {
                        Toast.makeText(getApplicationContext(), "Usuario o contraseña incorrectos", Toast.LENGTH_LONG).show();
                    }
                    editText.setText("");
                    editText1.setText("");
                    editText.findFocus();

                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

Registrar.java

public class Registrar extends AppCompatActivity {

    EditText nombre, usuario, password, puesto;
    Button reg;
    BaseDatos bd = new BaseDatos(this, "bd1",null,1);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_registro);
        final BaseDatos Bdu = new BaseDatos(this, "bd1", null, 1);

        reg = (Button) findViewById(R.id.reg);
        nombre = (EditText) findViewById(R.id.nombre);
        usuario = (EditText) findViewById(R.id.usuario);
        password = (EditText) findViewById(R.id.password);
        puesto = (EditText) findViewById(R.id.puesto);
        reg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bd.abrir();
                bd.nuevosUsuarios(String.valueOf(nombre.getText()),
                        String.valueOf(usuario.getText()),
                        String.valueOf(password.getText()),
                        String.valueOf(puesto.getText()));
                bd.cerrar();
                Toast.makeText(getApplicationContext(), "Registro guardado con exito", Toast.LENGTH_LONG).show();
                Intent m = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(m);
            }
        });
    }
}

BaseDatos.java

public class BaseDatos extends SQLiteOpenHelper {

    public BaseDatos(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

        @Override
        public void onCreate (SQLiteDatabase db){
            String query = ("create table trabajadores(_ID integer primary key autoincrement, Nombre text, Usuario text, Password text,Puesto text)");

        }
        @Override
        public void onUpgrade (SQLiteDatabase db,int oldVersion, int newVersion){
            db.execSQL("insert into trabajadores values(01,'admin','admin')");
        }
        public void abrir ()

        {
            this.getWritableDatabase();
        }
        public void cerrar ()
        {
        this.close();
        }
    public void nuevosUsuarios (String nom, String usr, String pass, String pues){
            ContentValues valores = new ContentValues();
            valores.put("Nombre", nom);
            valores.put("Usuario", usr);
            valores.put("Password", pass);
            valores.put("Puesto", pues);
            this.getWritableDatabase().insert("trabajadores", null, valores);
        }
    public Cursor check( String usr, String pass) throws SQLException{
        Cursor rcursor=null;
        rcursor=this.getReadableDatabase().query("trabajadores", new String[]{"_ID,","Nombre","Usuario","Password","Puesto"},
        "Usuario like '"+usr+"'"+" and Password like'"+pass+"'",null,null,null,null);
        return rcursor;
    }
}

1 Ответ

1 голос
/ 04 июня 2019

Вы не создаете таблицу.

В BaseDatos.java в методе onCreate добавьте строку: -

db.execSQL(query);

Таким образом, метод должен быть: -

@Override
public void onCreate (SQLiteDatabase db){
    String query = ("create table trabajadores(_ID integer primary key autoincrement, Nombre text, Usuario text, Password text,Puesto text)");
    db.execSQL(query);
}

Существует также проблема метода check , которая приведет к синтаксической ошибке SQlite из-за дополнительной ,.

Вместо

rcursor=this.getReadableDatabase().query("trabajadores", new String[]{"_ID,","Nombre","Usuario","Password","Puesto"},
            "Usuario like '"+usr+"'"+" and Password like'"+pass+"'",null,null,null,null);

должно быть

rcursor=this.getReadableDatabase().query("trabajadores", new String[]{"_ID","Nombre","Usuario","Password","Puesto"},
            "Usuario like '"+usr+"'"+" and Password like'"+pass+"'",null,null,null,null);

(запятая удаляется после _ID ).

Примечание перед запуском после внесения изменения удалите данные приложения или удалите приложение.

Демо

Когда началось: -

enter image description here

  • Обратите внимание, что все дисплеи имеют название действия (как выделено).
  • Красная стрелка указывает на кнопку, на которую нажали
  • На этом этапе нажатие на кнопку INICIAR вызывает тост.

Нажатие кнопки регистратора: -

enter image description here

  • Вводится номер пользователя (1), имя пользователя (Fred), пароль (пароль) и puesto (бла), и нажимаются кнопки Reg.

Возврат к MainActivity

enter image description here

  • Фред и пароль вводятся в Имя пользователя и пароль, и нажимается кнопка INICIAR.

Музыкальная активность

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...