Как отфильтровать базу данных SQL по диапазону и отобразить ее в ListView - PullRequest
0 голосов
/ 29 мая 2018

Я довольно новичок в Android Studio, поэтому извините за неопытность.

Я создал базу данных SQL, в которой каждый набор данных содержит идентификатор, имя металла и точку плавления.

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

Пользователь вводит значения max и min, используя два EditTexts.Затем нажимает кнопку, чтобы открыть отдельное действие с ListView, заполненным базой данных.

Код, который я написал до сих пор, ничего не делает и печатает ту же исходную базу данных без фильтрации.

Активность фильтра (если не заданы максимальные и минимальные значения, соответственно установлены 10000 и 0):

save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(!TextUtils.isEmpty(mpMaxInput.getText()) && !TextUtils.isEmpty(mpMinInput.getText())){
                double maxMP = Double.parseDouble(mpMaxInput.getText().toString());
                double minMP = Double.parseDouble(mpMinInput.getText().toString());
                myDB.filterData(maxMP,minMP);
                startActivity(mas);
            }

            else if(TextUtils.isEmpty(mpMaxInput.getText()) && !TextUtils.isEmpty(mpMinInput.getText())){
                double maxMP = 10000;
                double minMP = Double.parseDouble(mpMinInput.getText().toString());
                myDB.filterData(maxMP,minMP);
                startActivity(mas);
            }
            else if(!TextUtils.isEmpty(mpMaxInput.getText()) && TextUtils.isEmpty(mpMinInput.getText())){
               double maxMP = Double.parseDouble(mpMaxInput.getText().toString());
                double minMP = 0;
                myDB.filterData(maxMP,minMP);
                startActivity(mas);
                }
            else if(TextUtils.isEmpty(mpMaxInput.getText()) && TextUtils.isEmpty(mpMinInput.getText())){
                double maxMP = 10000;
                double minMP = 0;
                myDB.filterData(maxMP,minMP);
                startActivity(mas);
               }
        }
    });

DisplayListView Активность:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mas);
    overridePendingTransition(R.anim.activity_back_in, R.anim.activity_back_out);

    Intent intent = getIntent();

    openDB();
    populateListView();


}@Override
protected void onDestroy(){
    super.onDestroy();
    closeDB();
}

private void openDB(){
    myDB = new DBHandler(this);
    myDB.open();
}

private void closeDB(){
    myDB.close();
}

private void populateListView(){
    Cursor cursor = myDB.getAllRows();

    String[] fromFieldNames = new String[]{DBHandler.ALLOY_NAME, DBHandler.MELTING_POINT};
    int[] toViewIDs = new int[]{R.id.textView48, R.id.textView49};

    SimpleCursorAdapter myCursorAdaptor;
    myCursorAdaptor = new SimpleCursorAdapter(getBaseContext(), R.layout.item_layout, cursor, fromFieldNames,toViewIDs,0);

    ListView list = findViewById(R.id.listView);
    list.setAdapter(myCursorAdaptor);

}

DBAdapter:

public Cursor filterData(double max, double min){
    String query;
    query = "SELECT * FROM '" + DBHandler.TABLE_ALLOY_DETAILS + "' WHERE '" + MELTING_POINT + "' BETWEEN '" + min + "' AND '" + max + "' ";
    Cursor c = db.rawQuery(query, null);
            if(c!= null){
        c.moveToFirst();
    }
    return c;
}

Спасибо за любую помощь.

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