Я создал фитнес-приложение, в котором пользователь может сохранить его / ее activity
и просмотреть его в recycleview
. Это прекрасно работает, но когда нет данных, app crashes
, когда я пытаюсь получить доступ к recycleview layout
.
Мне нужно показать текстовое представление ("История пуста") вместо пустого recycleview
.
Вот часть моего xml recycleview
макета. Обратите внимание, что это относительный макет:
<ImageView
android:id="@+id/mainbackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/HistoryTab"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="2dp"
android:layout_marginEnd="-203dp"
android:scaleType="centerCrop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/road_run"
tools:ignore="contentDescription" />
<ImageView
android:id="@+id/overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/bottom_banner"
android:layout_below="@id/HistoryTab"
android:background="@drawable/run_interface_background" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/Recycle_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/bottom_banner"
android:layout_below="@id/HistoryTab" />
<TextView
android:id="@+id/EmptyActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Your History Is Empty"
android:textColor="#ffff"
android:textSize="16dp" />
Как вы видите, если повторное представление пусто, текстовое представление EmptyActivity должно быть видно ... ТОЛЬКО когда данных нет.
Ниже приведен код, который показывает, где и почему приложение:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycler_view_layout);
recyclerView = (RecyclerView) findViewById(R.id.Recycle_layout);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
RunoraDatabaseHelper runoraDatabaseHelper = new RunoraDatabaseHelper(this);
SQLiteDatabase sqLiteDatabase = runoraDatabaseHelper.getReadableDatabase();
Cursor cursor = runoraDatabaseHelper.RetrieveDataFromDatabase(sqLiteDatabase);
cursor.moveToFirst();
do {
RetrieveRunnerActivity retrieveRunnerActivity = new RetrieveRunnerActivity(cursor.getString(1), cursor.getString(2), (cursor.getString(3)));
arrayList.add(retrieveRunnerActivity);
} while (cursor.moveToNext());
runoraDatabaseHelper.close();
adapter = new RecycleAdapter(arrayList);
recyclerView.setAdapter(adapter);
returnButton = (Button) findViewById(R.id.returnButton);
history_btn = (Button) findViewById(R.id.history_btn);
returnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(DisplayHistory.this, home.class);
startActivity(intent);
}
});
history_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(DisplayHistory.this, settings.class);
startActivity(intent);
}
});
Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
Строка, в которой происходит сбой приложения:
RetrieveRunnerActivity retrieveRunnerActivity = new RetrieveRunnerActivity(cursor.getString(1), cursor.getString(2), (cursor.getString(3)));
As вы можете видеть, что, когда никакие данные не были сохранены, а база данных не возвращает никаких данных, приложение щелкает, когда я нажимаю, чтобы получить доступ к макету, содержащему повторный просмотр.
Пожалуйста, помогите. Я бьюсь головой об этом, и Я пробовал ответы, которые видел на stackoverflow, но все еще не добился успеха.
Если кто-то потребует, чтобы я опубликовал больше действий (recycleadapater, databasehelper, класс RetrieveRunnerActivity и т. Д. c) Пожалуйста, дайте мне знать.
Я несколько раз редактировал свой код, но я не получить желаемый результат. Приведенный ниже код позволяет мне получить доступ к моей операции повторного просмотра, когда в моей базе данных нет сохраненных данных для извлечения, но теперь я могу отображать текстовое представление вместо пустого повторного просмотра, но в то же время все кнопки в этом макете перестают работать.
Когда у меня есть данные, доступные для извлечения, recyclew_layout не показывает извлеченные данные / элементы, и все кнопки этого действия все еще не работают.
if (cursor.getCount() > 0) {
RetrieveRunnerActivity retrieveRunnerActivity = new RetrieveRunnerActivity(cursor.getString(1), cursor.getString(2), (cursor.getString(3)));
arrayList.add(retrieveRunnerActivity);
EmptyActivity.setVisibility(View.GONE);
} else {
if (cursor.getCount() <= 0) {
recycleLayout.setVisibility(View.GONE);
EmptyActivity.setVisibility(View.VISIBLE);
}
while (cursor.moveToNext()) {
runoraDatabaseHelper.close();