m0_74474210 2024-05-14 20:17 采纳率: 93.8%
浏览 3
已结题

关于#android#的问题:private List(语言-java)

            Cursor cursor=new MatrixCursor(new String[]{"name","age","weight"});
            for (User user:userList){
                cursor.addRow(new Object[]{"name","age","weight"});
            }
            return cursor;
   }

这一段的cursor.addrow报错(没有这个方法),如果把cursor类型改为matrixcursor的话,能运行但闪退

public class MainActivity extends AppCompatActivity  {
private ListView listView;
private DBOpenHelper dbOpenHelper;
private List<User> userList;
private adapter adapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView=findViewById(R.id.view);
            dbOpenHelper = new DBOpenHelper(MainActivity.this);
            //final SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
            insertUerData();
            userList=fetchAllUsers();
            adapter=new adapter(this,createCursorFromList(userList));
            listView.setAdapter(adapter);
        }

    private Cursor createCursorFromList(List<User> userList) {
            Cursor cursor=new MatrixCursor(new String[]{"name","age","weight"});
            for (User user:userList){
                cursor.addRow(new Object[]{"name","age","weight"});
            }
            return cursor;
    }

    private List<User> fetchAllUsers() {
            List<User> list=new ArrayList<>();
            SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
            Cursor cursor=db.rawQuery("select * from user",null);
            if (cursor.moveToFirst()){
                do {
                    User user=new User(
                            cursor.getString(cursor.getColumnIndex("name")),
                            cursor.getInt(cursor.getColumnIndex("age")),
                            cursor.getInt(cursor.getColumnIndex("weight"))
                    );
                    list.add(user);
                }while (cursor.moveToNext());
            }cursor.close();
            return list;
    }

    private void insertUerData() {
            dbOpenHelper.getWritableDatabase().execSQL("insert into user values('xiaohei',2,100)",null);
    }
}
  • 写回答

2条回答 默认 最新

  • 笑面虎 2024-05-14 20:17
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您的问题是要解决在Android开发中,使用Java语言创建一个MatrixCursor对象,并尝试从List<User>中添加数据到Cursor,但是遇到了两个问题:1) cursor.addRow方法报错,因为Cursor对象没有这个方法;2) 当将cursor类型改为MatrixCursor后,虽然可以运行,但是应用会闪退。

    【问题出现原因】:

    1. Cursor对象本身没有addRow方法,这是因为您实例化的是Cursor类而不是MatrixCursor类。MatrixCursor类是Cursor的一个子类,它提供了addRow方法。
    2. 即使将cursor类型改为MatrixCursor,您在addRow方法中传递的参数不正确。您传递了一个包含三个字符串的Object数组,而不是实际的User对象属性值。

    【问题解决方案】: 您需要确保使用MatrixCursor而不是Cursor,并且在调用addRow方法时传递正确的参数。

    【提供代码】: 以下是修改后的createCursorFromList方法的代码:

    private Cursor createCursorFromList(List<User> userList) {
        MatrixCursor cursor = new MatrixCursor(new String[]{"name", "age", "weight"});
        for (User user : userList) {
            // 注意这里需要传递实际的值,而不是字符串"name", "age", "weight"
            cursor.addRow(new Object[]{user.getName(), user.getAge(), user.getWeight()});
        }
        return cursor;
    }
    

    确保您的User类有相应的getName(), getAge(), 和 getWeight()方法。

    【代码运行方式】: 您需要在Android Studio环境中运行这段代码,确保您的项目配置正确,包括ListViewDBOpenHelper以及adapter等类都已正确实现。

    【代码预期运行结果】: 如果您的User类和adapter类都正确实现,并且数据库操作没有问题,那么应用将不会闪退,并且ListView将显示用户列表。

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?