Android 使用ContentValues存储的值顺序不正确,为什么?

Android 使用ContentValues存储的值顺序不正确,为什么?,android,database,sqlite,Android,Database,Sqlite,目前我正在开发我的第一个Android应用程序,我遇到了一些我无法解决的问题。当我尝试将数据插入自己的数据库时,出现错误:07-18 03:41:04.414:error/AndroidRuntime(3480):java.lang.NullPointerException 我插入表格的代码是: public long createRecord(String created_time, String modified_time, long reading, String unit

目前我正在开发我的第一个Android应用程序,我遇到了一些我无法解决的问题。当我尝试将数据插入自己的数据库时,出现错误:07-18 03:41:04.414:error/AndroidRuntime(3480):java.lang.NullPointerException

我插入表格的代码是:

public long createRecord(String created_time, String modified_time,
        long reading, String unit, String period, String remark) {

    ContentValues values = new ContentValues(6);
    values.put(KEY_CREATED_TIME, created_time);
    values.put(KEY_MODIFIED_TIME, modified_time); //System.out.println(values);
    values.put(KEY_RECORD, reading); //System.out.println(values);
    values.put(KEY_UNIT, unit); //System.out.println(values);
    values.put(KEY_PERIOD, period);// System.out.println(values);
    values.put(KEY_REMARK, remark); 

    System.out.println(values);
    return mDb.insert(DATABASE_TABLE, null , values);

}
这在适配器类下,适配器类是DatabaseHelper类的实例。对于DatabaseHelper类,我可以将创建的数据库从assets文件夹复制到system databases文件夹。但就是无法将数据创建到表中,我尝试打印出“值”,结果显示:

创建时间=2010-07-18 03:41:04备注单位=mg/dL读数=67时段=餐前修改时间=00:00:00 这不是它应该是的方式,所以我猜这可能是问题所在。
有人能帮我吗?在线搜索,但没有这么多关于这个的信息。提前感谢:)

订单未保留的原因是
ContentValues
HashMap
支持。所以没关系。

问题可能是由于
mDb
null
(请使用
System.out.println(“+mDb”);
)进行检查。

您看过sqliteDatabase i的源代码吗?它生成了一个sql并对其进行处理。但顺序基于:

   Set<Map.Entry<String, Object>> entrySet = null;
    if (initialValues != null && initialValues.size() > 0) {
        entrySet = initialValues.valueSet();
        Iterator<Map.Entry<String, Object>> entriesIter = entrySet.iterator();
Set entrySet=null;
if(initialValues!=null&&initialValues.size()>0){
entrySet=initialValues.valueSet();
迭代器entriester=entrySet.Iterator();
我认为它有问题?或者当有很多值的时候,顺序会出错。你发现了什么问题吗

if(db!=null){
         ContentValues row = new ContentValues();
         row.put("rt_id",tid);
         row.put("rs_id", sid);
         row.put("rsubject", rsubject);
         row.put("rdescr",rdescr);
         row.put("day", day);
         row.put("month",month);
         row.put("year",year);
         row.put("stamp", stamp);
         row.put("amount",amount);

         long chk = db.insert("records",null, row);

         if(chk!=0){
             Toast.makeText(myContext, "Record added successfully",Toast.LENGTH_LONG).show(); 
         }else{
             Toast.makeText(myContext, "Record added failed...! ",Toast.LENGTH_LONG).show();
         }
       }else{
           Toast.makeText(myContext, "could Not connected database..!!! ",Toast.LENGTH_LONG).show(); 
       }
     }catch(SQLiteException exc){
         Toast.makeText(myContext, "Record could not saved...!!! ",Toast.LENGTH_LONG).show();
     }finally{
         db.close();
         }

您可以检查您的数据库对象是否为null…或者只需打印就可以检查它…最好。

Ya,我已经检查了mDb,它显示为“null”。我可以知道原因以及如何修复它吗?谢谢在获取引用的行中出现了错误:
SQLiteDatabase mDb=//此处为null;
Ok,我添加了mDb=mDbHelper.getWritableDatabase();现在,代码在模拟器模式下工作正常,但在手机上不工作。如果我在设备上运行代码,它会显示一个错误消息:07-18 13:51:49.595:error/Database(2022):error inserting remark=ol period=Before-meat modified_time=00:00:00 unit=mg/dL reading=68 created_time=2010-07-18 13:51:49 07-18 13:51:49.595:error/Database(2022):android.database.sqlite.SQLiteException:没有这样的表:记录:,编译时:插入记录(备注、期间、修改的时间、单位、读数、创建的时间)值(?,,,,,,,?);有什么建议吗?你是说没有这样的表吗?但我运行adb shell,该表是为emulator准备的。至于设备,它总是给我opendir失败,权限被拒绝。系统中的数据库和设备之间有什么区别吗?对此很困惑。没有区别。你还没有创建表。