Как сделать RadioButton фильтром SQLite в Android Studio?
Этот код фильтрует SQL-запрос по 6 фильтрам: имя, вес, страна, мощность и тип. Как сделать элемент RadioButton отдельным фильтром? У меня есть 6 элементов RadioButton. Каждый элемент для одного фильтра. RadioButton Weight для фильтрации по весу, RadioButton Country для фильтрации по стране и т. д.
MySQLite
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Locale;
import java.util.StringTokenizer;
public class MySQLite extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 4;
static final String DATABASE_NAME = "phones";
static final String TABLE_NAME = "emergency_service";
static final String ID = "id";
static final String NAME = "name";
static final String PRICE = "price";
static final String TYPE = "type";
static final String POWER = "power";
static final String WEIGHT = "weight";
static final String COUNTRY = "country";
static final String ASSETS_FILE_NAME = "vacuumcleaner.txt";
static final String DATA_SEPARATOR = "|";
private Context context;
public MySQLite(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ ID + " INTEGER PRIMARY KEY,"
+ NAME + " TEXT,"
+ PRICE + " TEXT,"
+ TYPE + " TEXT,"
+ POWER + " TEXT,"
+ WEIGHT + " TEXT,"
+ COUNTRY + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
System.out.println(CREATE_CONTACTS_TABLE);
loadDataFromAsset(context, ASSETS_FILE_NAME, db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
System.out.println("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public void addData(SQLiteDatabase db, String name, String price, String type, String power, String weight, String country) {
ContentValues values = new ContentValues();
values.put(NAME, name);
values.put(PRICE, price);
values.put(TYPE, type);
values.put(POWER, power);
values.put(WEIGHT, weight);
values.put(COUNTRY, country);
db.insert(TABLE_NAME, null, values);
}
public void loadDataFromAsset(Context context, String fileName, SQLiteDatabase db) {
BufferedReader in = null;
try {
InputStream is = context.getAssets().open(fileName);
in = new BufferedReader(new InputStreamReader(is));
String str;
while ((str = in.readLine()) != null) {
String strTrim = str.trim();
if (!strTrim.equals("")) {
StringTokenizer st = new StringTokenizer(strTrim, DATA_SEPARATOR);
String name = st.nextToken().trim();
String price = st.nextToken().trim();
String type = st.nextToken().trim();
String power = st.nextToken().trim();
String weight = st.nextToken().trim();
String country = st.nextToken().trim();
addData(db, name, price, type, power, weight, country);
}
}
} catch (IOException ignored) {
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ignored) {
}
}
}
}
public String getData(String filter) {
String selectQuery;
if (filter.equals("")) {
selectQuery = "SELECT * FROM " + TABLE_NAME + " ORDER BY " + NAME;
} else {
selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE (" + PRICE + " LIKE '%" +
filter.toLowerCase() + "%'" +
" OR " + TYPE + " LIKE '%" + filter + "%'" + " OR " + POWER + " LIKE '%" + filter + "%'"
+ " OR " + WEIGHT + " LIKE '%" + filter + "%'" + " OR " + COUNTRY +
" LIKE '%" + filter + "%'" + " OR " + NAME + " LIKE '%" + filter + "%'" +") ORDER BY " + NAME;
}
System.out.println(selectQuery);
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
StringBuilder data = new StringBuilder();
int num = 0;
if (cursor.moveToFirst()) {
do {
int n = cursor.getColumnIndex(NAME);
int t = cursor.getColumnIndex(PRICE);
int k = cursor.getColumnIndex(TYPE);
int s = cursor.getColumnIndex(POWER);
int a = cursor.getColumnIndex(WEIGHT);
int d = cursor.getColumnIndex(COUNTRY);
String name = cursor.getString(n);
String price = cursor.getString(t);
String type = cursor.getString(k);
String power = cursor.getString(s);
String weight = cursor.getString(a);
String country = cursor.getString(d);
data.append(String.valueOf(++num) + ") " + name + ": " + price + ": "+ type + ": " + power + ": " + weight + ": " + country + ": " +"\n");
} while (cursor.moveToNext());
}
return data.toString();
}
}
Это был класс SQLite, вот MainActivity.java:
MainActivity
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private final int LARGE_FONT = 16;
private final int SMALL_FONT = 12;
private int fontSize = SMALL_FONT;
MySQLite db = new MySQLite(this);
EditText editText;
TextView textView;
RadioGroup radioGroup;
RadioButton priceRadioButton;
RadioButton powerRadioButton;
RadioButton typeRadioButton;
RadioButton weightRadioButton;
RadioButton countryRadioButton;
RadioButton nameRadioButton;
static final String FILTER = "FILTER";
String filter = "";
SharedPreferences sPref;
static final String CONFIG_FILE_NAME = "Config";
static final String FONT_SIZE = "FontSize";
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putString(FILTER, filter);
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
editText = findViewById(R.id.editText);
textView = findViewById(R.id.textView);
textView.setKeyListener(null);
sPref = getSharedPreferences(CONFIG_FILE_NAME, MODE_PRIVATE);
fontSize = sPref.getInt(FONT_SIZE, SMALL_FONT);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize);
textView.requestFocus();
if (savedInstanceState != null) {
editText.setText(savedInstanceState.getString(FILTER));
}
textView.setText(R.string.Загрузка_данных);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
new Thread(new Runnable() {
public void run() {
filter = editText.getText().toString().trim();
final String data = db.getData(filter);
textView.post(new Runnable() {
public void run() {
textView.setText(data);
}
});
}
}).start();
}
});
editText.post(new Runnable() {
public void run() {
editText.setText(filter);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
menu.findItem(R.id.large_font).setChecked(fontSize == LARGE_FONT);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.email) {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL, new String[]{getString(R.string.myemail)});
i.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.Добавьте_еще_номер));
i.putExtra(Intent.EXTRA_TEXT, getString(R.string.Предлагаю_такой_номер));
try {
startActivity(Intent.createChooser(i, getString(R.string.Посылка_письма)));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(MainActivity.this, R.string.Нет_установленного_почтового_клиента, Toast.LENGTH_SHORT).show();
}
return true;
}
if (id == R.id.large_font) {
item.setChecked(!item.isChecked());
int size = item.isChecked() ? LARGE_FONT : SMALL_FONT;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
fontSize = size;
return true;
}
if (id == R.id.exit) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onStop() {
super.onStop();
SharedPreferences.Editor ed = sPref.edit();
ed.putInt(FONT_SIZE, fontSize);
ed.apply();
}
}