Не удалось вставить данные в локальное хранилище - PullRequest
0 голосов
/ 12 декабря 2018

Код активности

    private SQLiteDatabase mSqliteDatabase;

public static String TABLE_CHAT_DATA = null;
public static final String KEY_SENDER = "Sender";
public static final String KEY_MESSAGE = "Message";
public static final String KEY_TIME = "Time";
public static final String KEY_SEEN = "Seen";
public static final String KEY_TIMER = "Timer";
public static final String KEY_TYPE = "Type";

onCreate

 mSqliteDatabase = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
    TABLE_CHAT_DATA = MessageRecieverId;
    String mQuery = "CREATE TABLE IF NOT EXISTS " + TABLE_CHAT_DATA + "(" + KEY_SENDER + " TEXT, " + KEY_MESSAGE
            + " TEXT, " + KEY_TIME + " TEXT, " + KEY_SEEN + " TEXT, " + KEY_TIMER + " TEXT, " + KEY_TYPE + "TEXT)";
    mSqliteDatabase.execSQL(mQuery);

Вставка данных

     MainData helper = new MainData(getApplicationContext());
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(KEY_SENDER, "Me");
        contentValues.put(KEY_MESSAGE, messageText);
        contentValues.put(KEY_TIME, String.valueOf(ServerValue.TIMESTAMP));
        contentValues.put(KEY_SEEN, "No");
        contentValues.put(KEY_TIMER, "TYPE");
        contentValues.put(KEY_TYPE, "Text");

        long returnVariable = db.insert(TABLE_CHAT_DATA,null,contentValues);
        if (returnVariable == -1) {
            Toast.makeText(getApplication(), "Nope", Toast.LENGTH_LONG).show();
            //-1 means there was an error updating the values
        } else {
            Toast.makeText(getApplication(),"SAVED", Toast.LENGTH_SHORT).show();
        }

Toast показывает Nope, что означает, что возвращаемое значение равно -1, что означаетэто не удалось.Я неоднократно просматривал один и тот же код, но не смог понять, почему он не работает.

Таблица успешно создана, и при вставке данных ни одна из них не является нулевой, потому что я тоже пытался вставить жестко закодированные данные, но все равно не получилось.Также попытался MainData helper = new MainData (this); вместо getApplicationContext () , но все еще не работает.Может кто-то указать, где я ошибся?

Ошибка после попытки insertOrThrow

FATAL EXCEPTION: main
                                                                             Process: com.appmaster.akash.messageplus, PID: 25418
                                                                             android.database.sqlite.SQLiteException: table eR3C1LXJhzaK3fPzCpcuTuz9jZB3 has no column named Type (code 1): , while compiling: INSERT INTO eR3C1LXJhzaK3fPzCpcuTuz9jZB3(Sender,Time,Type,Message,Seen,Timer) VALUES (?,?,?,?,?,?)
                                                                                 at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                                 at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
                                                                                 at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
                                                                                 at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                                 at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                                                 at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                                                 at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1472)
                                                                                 at android.database.sqlite.SQLiteDatabase.insertOrThrow(SQLiteDatabase.java:1369)
                                                                                 at com.appmaster.akash.messageplus.Chat.sendMessage(Chat.java:843)
                                                                                 at com.appmaster.akash.messageplus.Chat.access$800(Chat.java:79)
                                                                                 at com.appmaster.akash.messageplus.Chat$5.onClick(Chat.java:561)
                                                                                 at android.view.View.performClick(View.java:6256)
                                                                                 at android.view.View$PerformClick.run(View.java:24701)
                                                                                 at android.os.Handler.handleCallback(Handler.java:789)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                                 at android.os.Looper.loop(Looper.java:164)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Немного запутано, потому что он не показывает такой столбец, но при создании он явно имеет столбец

...