如何使用 Content Provider 和 Asynctask 将数据保存到 SQLite

How to save data to SQLite using Content provider and Asynctask

我在使用 ContentProviderAsynctask 将数据保存到数据库 SQLite 时遇到问题,这是我的代码

BtnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String JudulSesi = String.valueOf(judulSesi.getText());
            String Description = String.valueOf(Ket.getText());
            ContentValues contentValues = new ContentValues();

            contentValues.put(LocalDBHandler.FIELD_SESSION_TYPE, sessionType);
            contentValues.put(LocalDBHandler.FIELD_SESSION_NAME, JudulSesi);
            contentValues.put(LocalDBHandler.FIELD_SESSION_DESC, Description);
            contentValues.put(LocalDBHandler.FIELD_SESSION_TIME,Date.toString());
            contentValues.put(LocalDBHandler.FIELD_ELAPSED_TIME, dataTimeElapsed );
            contentValues.put(LocalDBHandler.FIELD_ARRAYPOINT,stringPoint);
            contentValues.put(LocalDBHandler.FIELD_DISTANCE, dataJarak);
            contentValues.put(LocalDBHandler.FIELD_SPEED, speed);
            contentValues.put(LocalDBHandler.FIELD_HEART_RATE, heartRate);
            contentValues.put(LocalDBHandler.FIELD_CALLORIES, callorie);

            SaveToDatabase savetoDB = new SaveToDatabase();

            savetoDB.execute(contentValues);

            Toast.makeText(SaveSession.this, "You Click Save Button", Toast.LENGTH_SHORT).show();

        }
    });

private class SaveToDatabase extends AsyncTask<ContentValues,Void,Void>{
    @Override
    protected Void doInBackground(ContentValues... contentValues) {
        getContentResolver().insert(Uri.parse(LocalDBHandler.DATABASE_TABLE),contentValues[0]);
        return null;
    }
}

当我 运行 我的程序时,它关闭了,这是 logcat 结果

12-26 02:21:43.236 8436-9787/com.armand17.runandride E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #5 Process: com.armand17.runandride, PID: 8436 java.lang.RuntimeException: An error occurred while executing doInBackground()
  at android.os.AsyncTask.done(AsyncTask.java:309)
  atjava.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
  at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
  at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
  at java.lang.Thread.run(Thread.java:818)
  Caused by: java.lang.IllegalArgumentException: Unknown URL run_and_ride
  at android.content.ContentResolver.insert(ContentResolver.java:1227)
  at com.armand17.runandride.SaveSession$SaveToDatabase.doInBackground(SaveSession.java:143)
  at com.armand17.runandride.SaveSession$SaveToDatabase.doInBackground(SaveSession.java:140)
  at android.os.AsyncTask.call(AsyncTask.java:295)
  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
  at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234) 
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
  at java.lang.Thread.run(Thread.java:818) 

说是我的Asynctask出错了,但是不知道错在哪里

问题出在这里:

Caused by: java.lang.IllegalArgumentException: Unknown URL run_and_ride android.content.ContentResolver.insert(ContentResolver.java:1227)

您的其中一个名字 (run_and_ride) 无效。检查数据库和 LocalDBHandler 中的名称,并根据 this.

检查清单