0

我对 Android Studio 还是很陌生,我已经在不同的论坛中查看过这个问题,但我还没有完全找到一个与我的问题特别相关的问题(或者我至少没有足够的经验来识别它。)

我创建了一个活动,其中有人将 3 个不同的单词输入到 3 个不同的 EditText 视图中,并且应该在创建时将这 3 个单独的值插入到数据库的“第 1 列”或“COL_1”中,当然还会创建另一个意图并移动在检查/证明值已插入数据库后进行下一个活动。

我的问题是只有第三个单词作为一行(或记录)输入到数据库中,而不是前两个。对不起,就像我说我是新手,我错过了什么?:

编辑文本活动

package com.example.jonathan.om11;

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class ContributionsActivity extends AppCompatActivity {

    Button goToMainPageBtn;
    ContribDatabase contribDatabase;
    EditText contribution1,contribution2,contribution3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contributions);

        contribDatabase = new ContribDatabase(this);
        contribution1 = (EditText) findViewById(R.id.contribution1);
        contribution2 = (EditText) findViewById(R.id.contribution2);
        contribution3 = (EditText) findViewById(R.id.contribution3);

        goToMainPageBtn = (Button) findViewById(R.id.goToMainPageBtn);
        goToMainPageBtn.setOnClickListener(new View.OnClickListener(){
            public void onClick (View v){
                boolean isInserted = contribDatabase.insertData(
                        contribution1.getText().toString(),
                        contribution2.getText().toString(),
                        contribution3.getText().toString());
                Toast.makeText(ContributionsActivity.this, "Thank you for contributing, enjoy!", Toast.LENGTH_SHORT).show();
                if(isInserted == true) {
                    toContribPage(v);
                } else {
                    Toast.makeText(ContributionsActivity.this, "Oops! Contributions did not save, try again please!", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    public void toContribPage(View v) {
        Intent i = new Intent("android.intent.action.TabbedView");
        startActivity(i);
    }
}

SQLITEOPENHELPER 类

package com.example.jonathan.om11;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by Jonathan on 2/10/18.
 */

public class ContribDatabase extends  SQLiteOpenHelper {

    public static final String DATABASE_NAME = "Contributions.db";
    public static final String TABLE_NAME = "Contributions_table";
//    public static final String COL_1 = "ID";
    public static final String COL_1 = "CONTRIBUTIONS";

    public ContribDatabase(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
//        db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT, CONTRIBUTIONS TEXT)");
          db.execSQL("create table " + TABLE_NAME +" (CONTRIBUTIONS TEXT)");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public boolean insertData(String contribution1, String contribution2, String contribution3) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues =  new ContentValues();
        contentValues.put(COL_1,contribution1);
        contentValues.put(COL_1,contribution2);
        contentValues.put(COL_1, contribution3);

        //Check for if data is inserted or not
        long result = db.insert(TABLE_NAME,null,contentValues);
        if(result == -1) {
            return false;
        } else {
            return true;
        }
    }

//    public Cursor getAllData() {
//        SQLiteDatabase db = this.getWritableDatabase();
//        Cursor res = db.rawQuery("select * from " + TABLE_NAME, null);
//        return res;
//    }
}
4

3 回答 3

0

只有第三个是插入,因为您要key为 3 个不同的值覆盖相同的值。

    contentValues.put(COL_1,contribution1);
    contentValues.put(COL_1,contribution2);
    contentValues.put(COL_1, contribution3);

在这里,您覆盖了COL_13 次。

您必须在数据库表中创建另外 2 列或将其他 2 个值与一些分隔符字符串连接,以便以后可以拆分它们。

于 2018-02-12T08:23:18.390 回答
0

你的代码有问题。insertData 方法有一些问题。用以下代码替换您的代码

public boolean insertData(String contribution1, String contribution2, String contribution3) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues =  new ContentValues();
    ContentValues contentValues2 =  new ContentValues();
    ContentValues contentValues3 =  new ContentValues();
    contentValues.put(COL_1,contribution1);
    contentValues2.put(COL_1,contribution2);
    contentValues3.put(COL_1, contribution3);

    //Check for if data is inserted or not
    long result = db.insert(TABLE_NAME,null,contentValues);
    long result2 = db.insert(TABLE_NAME,null,contentValues2);
    long result3 = db.insert(TABLE_NAME,null,contentValues3);
    if(result == -1 || result2 == -1 || result3 == -1) {
        return false;
    } else {
        return true;
    }
}

之所以发生这种情况,是因为您在同一对象中映射了不同的值,而不是插入 3 个不同的值。希望有帮助。

于 2018-02-12T08:23:54.347 回答
0

您在同一个键条目中输入数据 3 次,这就是为什么您获得最后输入的数据的原因。您有 3 个不同的数据条目 - 每个 Edittext 条目,因此您需要有 3 个不同的键,例如我的示例:

 contentValues.put(COL_1,contribution1);
 contentValues.put(COL_1,contribution2);
 contentValues.put(COL_1, contribution3);

你需要有这样的东西:

contentValues.put(COL_1,contribution1);
contentValues.put(COL_2,contribution2);
contentValues.put(COL_3, contribution3);
于 2018-02-12T08:24:56.720 回答