android - 数据未显示在 ListView 中

标签 android

我正在创建一个小型的 CRUD 系统。添加记录后,当我单击查看按钮时,我必须查看记录。我附上了下面的图片和代码。 出现错误

**android.database.CursorIndexOutOfBoundsException: Index 4 requested, with a size of 4**

行是titles.add(c.getString(age));

点击此处的按钮代码

  Intent i = new Intent(this,view.class);
            startActivity(i);

enter image description here

**Listview xml file**

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".view">

    <ListView
        android:id="@+id/lst1"
        android:layout_width="368dp"
        android:layout_height="495dp"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp" />
</LinearLayout>

view.java

 public class view extends AppCompatActivity {
        ListView lst1;
        ArrayList<String> titles = new ArrayList<String>();
        ArrayAdapter arrayAdapter;

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

            SQLiteDatabase db = openOrCreateDatabase("StudentDB", Context.MODE_PRIVATE, null);
            lst1 = findViewById(R.id.lst1);

            Cursor c = db.rawQuery("select * from record",null);
            int name = c.getColumnIndex("name");
            int age = c.getColumnIndex("age");
            c.moveToFirst();
            titles.clear();
            arrayAdapter = new ArrayAdapter(this,R.layout.support_simple_spinner_dropdown_item,titles);
            lst1.setAdapter(arrayAdapter);
              while (c != null)
              {
                  titles.add(c.getString(name));
                  titles.add(c.getString(age));

                  c.moveToNext();
              }
            arrayAdapter.notifyDataSetChanged();

        }
    }

最佳答案

我认为你应该使用 do-while 循环:

if(c.moveToFirst()) {
    do {
        titles.add(c.getString(name));
        titles.add(c.getString(age));
     } while (c.moveToNext())
}

关于android - 数据未显示在 ListView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54970305/

相关文章:

java - 如何使用 ConstraintLayout 管理带有布局的自定义 View 的宽度?

android - 我在 Play 商店部署即时应用程序时收到此错误消息

Android Kiosk 模式 - 防止用户从 "unauthorized"取消固定应用程序

android - 我可以制作一个 Android 按钮模板吗?

Android 应用程序中的 java.lang.NullPointerException

Android - 从 SurfaceView 访问按钮

java - 如何将 TextView 声明为全局变量以在其他类中使用

android - 有没有一种方法可以设置 build.gradle 中的 buildConfigField 值以直接在布局 xml 文件中查看?

javascript - 在 Android 上的 Firefox 中检测双指缩放

android - 如何在 Android Studio 中将 javadoc 附加到 Google Play 服务?