Как получить определенные строки из базы данных sqlite preexisitng в android
Привет,
у меня есть база данных, в которой некоторые случаи равны нулю, если я хочу использовать данные столбца в качестве заголовка(в expendable listview), и если столбец имеет нулевые значения, у меня есть несколько пустых заголовков. как выбрать определенные строки для отображения в качестве заголовка . спасибо
это мое Database.java
package ma.ac.iav.learn; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; public class Database { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "URTc.db"; private static final String DATABASE_TABLE = "OrganAnatomy"; public static final String DATABASE_ID = "_id"; public static final String DATABASE_GROUP_1 = "Larynx_features"; public static final String DATABASE_CHILD_1 = "Larynx"; private final Context mContext; private DatabaseHelper mDatabaseHelper; private SQLiteDatabase mDB; public Database(Context context) { mContext = context; } public void open() { mDatabaseHelper = new DatabaseHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION); mDB = mDatabaseHelper.getWritableDatabase(); } public void close() { if (mDatabaseHelper != null) mDatabaseHelper.close(); } public Cursor getDatabase() { return mDB.query(DATABASE_TABLE, null, null, null, null, null, DATABASE_GROUP_1); } public Cursor getID(long rowID) { return mDB.query(DATABASE_TABLE, null, "_id" + " = " + rowID , null, null, null, null); } public class DatabaseHelper extends SQLiteAssetHelper { public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } } }
и это моя основная деятельность:
package ma.ac.iav.learn; import android.content.Context; import android.database.Cursor; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ExpandableListView; import android.widget.SimpleCursorTreeAdapter; public class MainActivity extends AppCompatActivity { ExpandableListView expandableListView; Database mDatabase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* "Called when the database has been opened." https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onOpen(android.database.sqlite.SQLiteDatabase) */ mDatabase = new Database(this); mDatabase.open(); /* "This interface provides random read-write access to the result set returned by a database query." https://developer.android.com/reference/android/database/Cursor.html */ Cursor cursor = mDatabase.getDatabase(); startManagingCursor(cursor); /* "A list of column names that will be used to display the data for a group." "The group views (from the group layouts) that should display column in the "from" parameter." "A list of column names that will be used to display the data for a child." "The resource identifier of a layout file that defines the views for a child." https://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html#SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, java.lang.String[], int[], int, java.lang.String[], int[]) */ String[] childFrom = new String[]{Database.DATABASE_CHILD_1}; String[] groupFrom = new String[]{Database.DATABASE_GROUP_1}; int[] groupTo = {R.id.group1}; int[] childTo = {R.id.child1}; /* "An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file." https://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html */ SimpleCursorTreeAdapter simplecursortreeAdapter = new ExpandableListViewAdapter( this, cursor, R.layout.list_group, groupFrom, groupTo, R.layout.list_child, childFrom, childTo ); /* "Finds a view that was identified by the android:id XML attribute that was processed in onCreate(Bundle)." "Sets the adapter that provides data to this view." https://developer.android.com/reference/android/app/Activity.html#findViewById(int) https://developer.android.com/reference/android/widget/ExpandableListView.html#setAdapter(android.widget.ExpandableListAdapter) */ expandableListView = findViewById(R.id.expandableListview); expandableListView.setAdapter(simplecursortreeAdapter); } /* "Closes the Cursor, releasing all of its resources and making it completely invalid." https://developer.android.com/reference/android/database/Cursor.html#close() */ protected void onDestroy() { super.onDestroy(); mDatabase.close(); } private class ExpandableListViewAdapter extends SimpleCursorTreeAdapter { private ExpandableListViewAdapter( Context context, Cursor cursor, int groupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo) { super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo); } /* "Gets the Cursor for the children at the given group." https://developer.android.com/reference/android/widget/CursorTreeAdapter.html#getChildrenCursor(android.database.Cursor) */ protected Cursor getChildrenCursor(Cursor groupCursor) { return mDatabase.getID(groupCursor.getInt(groupCursor.getColumnIndex(Database.DATABASE_ID))); } } }
Что я уже пробовал:
я искал в интернете, но не смог найти четкого ответа
Richard MacCutchan
Вам нужно читать строки, пока вы не найдете столбец, отличный от null. Хотя это не кажется очень хорошим дизайном.
Member 13930815
что вы подразумеваете под чтением строк, объясните подробнее с помощью кода, пожалуйста
Richard MacCutchan
Ну, поскольку я действительно не понимаю, что вы пытаетесь сделать, я не могу дать больше подробностей. Почему вы просто не используете имена столбцов в качестве заголовков?
Member 13930815
Вот моя структура базы данных: https://imgur.com/6eyDx5c как вы можете видеть , некоторые столбцы имеют пустые регистры, и это генерирует либо некоторые пустые чайлды( если я использовал столбцы в качестве заголовков), либо некоторые пустые заголовки(если я использовал содержимое столбца в качестве заголовка), как вы можете видеть здесь https://imgur.com/VNlFtoP (венозный дренаж у пустого ребенка , и я не хочу, чтобы он вообще появлялся)
Member 13930815
я думаю, проблема в том, что я должен использовать оператор if (X != NULL) или что-то еще, но не могу понять, как и правильно ли это делать! пожалуйста помочь
Richard MacCutchan
Вам просто нужно проверить каждый столбец, когда вы добавляете их в представление. Если содержимое равно null, то не создавайте метку элемента.
Member 13930815
я понимаю, что вы имеете в виду, но я использую внешнюю базу данных sqlite ..так как я принимаю то, что вы сказали desgin выше, пожалуйста
Richard MacCutchan
Внешнее или внутреннее не имеет значения, это просто база данных. Из того, что я понимаю, вам нужно прочитать данные в какой-то другой тип коллекции в вашей программе, игнорируя нулевые элементы. Как только у вас есть правильные данные, вы можете отформатировать их для отображения.