Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从另一个类将记录插入SQLite数据库_Java_Android_Mysql_Database_Sqlite - Fatal编程技术网

Java 无法从另一个类将记录插入SQLite数据库

Java 无法从另一个类将记录插入SQLite数据库,java,android,mysql,database,sqlite,Java,Android,Mysql,Database,Sqlite,我试图将记录插入sqlite数据库并绕过contentResolver。第一个名为EventProvider的类扩展了ContentProvider,还包含我的SQLite数据库助手类的一个实例,如下所示。因此,当我通过contentResolver插入记录时,第一个类中的代码工作正常,但在EventJSONParser类中,我希望直接将记录插入sqlite,而不是通过SQLiteDatabase db=provider.getDatabase中的NullPointerException插入;u

我试图将记录插入sqlite数据库并绕过contentResolver。第一个名为EventProvider的类扩展了ContentProvider,还包含我的SQLite数据库助手类的一个实例,如下所示。因此,当我通过contentResolver插入记录时,第一个类中的代码工作正常,但在EventJSONParser类中,我希望直接将记录插入sqlite,而不是通过SQLiteDatabase db=provider.getDatabase中的NullPointerException插入;unmarshalEventQuery方法中的代码行。我怀疑databasehelper的实例不是由onCreate方法创建的。请告诉我如何解决这个问题。谢谢

头等舱:

public class EventProvider extends ContentProvider{
private DatabaseHelper helper;
private SQLiteDatabase db;

@Override
public boolean onCreate() {
    helper = new DatabaseHelper(getContext());
    db = helper.getWritableDatabase();
    return true;
}

public SQLiteDatabase getDatabase(){
    return db;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    if (BuildConfig.DEBUG) { Log.d(TAG, "insert@" + uri); }

    switch (uriMatcher.match(uri)){
        case EVENTS_DIR:
            break;
        default:
            throw new UnsupportedOperationException("Unrecognized URI: " + uri);
    }

    values = COLUMN_MAP.translateCols(values);
    values.put(DatabaseContract.COL_DIRTY, MARK);enter code here

    SQLiteDatabase db = getDatabase();
    return eventInsert(uri, values, db);
}

public Uri eventInsert(Uri uri, ContentValues values, SQLiteDatabase mdb){
    if (BuildConfig.DEBUG){
        Log.d(TAG, "insert@" + uri + ": {" + values + "}");
    }

    long pk = mdb.insert(DatabaseContract.EVENT_TABLE, null, values);

    if (pk > 0) {
        uri = null;
    } else{
        uri = uri.buildUpon().appendPath(String.valueOf(pk)).build();
        getContext().getContentResolver().notifyChange(uri, null);
    }
    return uri;
}
二等舱:

public class EventJSONParser {

private EventProvider provider;

public EventJSONParser(EventProvider restfulProvider){
    provider = restfulProvider;
}

public void unmarshalEventQuery(JSONObject json){
    try {
        String error = json.getString(Const.KEY_ERROR);
        int statusCode = json.getInt(Const.KEY_STATUS_CODE);

        if (error.equals("false") && statusCode == 200){
            JSONArray events = json.getJSONArray(TAG_EVENTS);

            for(int i = 0; i < events.length(); i++){
                JSONObject e = events.getJSONObject(i);
                ContentValues values = new ContentValues();

                values.put(UNMARSHAL_TAB.get(TAG_EVENT_ID), e.getString(TAG_EVENT_ID));
                values.put(UNMARSHAL_TAB.get(TAG_CAL_ID), e.getString(TAG_CAL_ID));
                values.put(UNMARSHAL_TAB.get(TAG_EVENT_TITLE), e.getString(TAG_EVENT_TITLE));
                values.put(UNMARSHAL_TAB.get(TAG_START_DATE), e.getString(TAG_START_DATE));
                values.put(UNMARSHAL_TAB.get(TAG_END_DATE), e.getString(TAG_END_DATE));
                values.put(UNMARSHAL_TAB.get(TAG_LOCATION), e.getString(TAG_LOCATION));
                values.put(UNMARSHAL_TAB.get(TAG_VISIBILITY), e.getString(TAG_VISIBILITY));
                values.put(UNMARSHAL_TAB.get(TAG_DESCRIPTION), e.getString(TAG_DESCRIPTION));

                SQLiteDatabase db = provider.getDatabase();
                Uri uri = provider.eventInsert(EventContract.EVENT_URI, values, db);
                Log.e(TAG, "query uri" + uri);
            }
        }
    }catch (JSONException ex){
        ex.printStackTrace();
    }
}

}

在对数据库运行操作之前,应先打开数据库。 这个类文件

请参阅我的github:

为了更好地在宣言文件中授予权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在何处使用EventJSONParser类请添加带问题的代码谢谢您的回答…但是由于我的数据库连接是在onCreate方法中打开的…我如何重用它来连接数据库。请在另一个方法中打开和关闭数据库连接。在每次数据库操作之后,使用close方法关闭数据库连接。并在每次DB操作之前调用open方法。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />