我正在尝试将字符串数组插入“GRADES_COL”列到数据库的表中。 我设计了两个按钮,一个用于在每次单击时创建一个新的 EditText(称为 idBtnAddGrade),然后使用 add() 方法将这些 EditText 存储在 ArrayList 中,而第二个按钮(称为 idBtnEnterGrade) 用于解析存储在ArrayList中的每个EditText的文本,然后将它们存储在一个String数组中,最后将数组的值插入到“GRADES_COL”列中(链接一个包含插入语句的方法DBHandler 类)。我提到的所有内容都是在 StudentGrades 课程中写的。
这是 StudentGrade 类:
package com.example.gpa;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.InputFilter;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
public class StudentGrades extends AppCompatActivity {
private Button idBtnAddGrade,idBtnEnterGrade;
DBHandler dbHandler;
private LinearLayout parentLayout;
EditText edittTxt;
public static ArrayList<EditText> allEdittTxts=new ArrayList<EditText>();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student_grades);
idBtnAddGrade=(Button)findViewById(R.id.idBtnAddGrade);
idBtnEnterGrade=(Button)findViewById(R.id.idBtnEnterGrade);
parentLayout = (LinearLayout) findViewById(R.id.parentLayout);
idBtnAddGrade.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
createEditTextView();
}
});
idBtnEnterGrade.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String[] grades=new String[allEdittTxts.size()];
for(int i=0; i < allEdittTxts.size(); i++){
grades[i]=allEdittTxts.get(i).getText().toString();
}
/*if(grade.isEmpty()){
Toast.makeText(StudentGrades.this,"Please Enter Your Grades!",Toast.LENGTH_SHORT).show();
}*/
dbHandler.addNewGrades(grades);
Toast.makeText(StudentGrades.this, "Grade has been added.", Toast.LENGTH_SHORT).show();
for(int i=0; i < allEdittTxts.size(); i++){
allEdittTxts.get(i).setText("");
}
}
});
}
protected void createEditTextView() {
i++;
String column="";
DBHandler dbHandler=new DBHandler(this);
Cursor cursor=dbHandler.GradesHintPlacer();
int coursesCount=dbHandler.getCoursesCount();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams (
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.setMargins(0,10,0,10);
edittTxt = new EditText(this);
allEdittTxts.add(edittTxt);
/* ........ */
parentLayout.addView(edittTxt);
}
}
我创建了一个包含“AddNewGrades”方法的“DBHandler”类,该方法包含将数组插入“GRADES_COL”列的插入语句:
package com.example.gpa;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.List;
public class DBHandler extends SQLiteOpenHelper {
private static final String TABLE_NAME = "courses";
private static final String GRADE_COL = "Grade";
public DBHandler(Context context) {
super(context, DB_NAME, null, DB_VERSION);
@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE " + TABLE_NAME + " ("
// + ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+USERNAME_COL+" TEXT,"
+ PROGRAM_COL + " TEXT,"
+ NAME_COL + " TEXT,"
+ CODE_COL + " TEXT,"
+ DURATION_COL + " TEXT,"
+ GRADE_COL + " TEXT)";
db.execSQL(query);
}
public void addNewGrades(String[] grades){
SQLiteDatabase db= this.getWritableDatabase();
ContentValues values=new ContentValues();
for(int i=0;i< grades.length;i++){
values.put(GRADE_COL,grades[i]);
db.insert(TABLE_NAME,null,values);
}
db.close();
}
}
注意我已经添加了另一种方法来在表的其他列中插入数据,但现在我只想将数据添加到特定的“GRADES_COL”列。问题是,当我单击“idBtnEnterGrade”以将数组值插入表中时,该按钮不起作用并且应用程序崩溃了。我能做些什么来解决这个问题或者我需要添加/修改什么来解决这个问题?
我尝试了很多东西,我尝试用另一个 ArrayList 替换 Strings 数组,但它没有用。我试图将那条线(
ContentValues values=new ContentValues();
)放在循环内外:
ContentValues values=new ContentValues();
for(int i=0;i< grades.length;i++){
values.put(GRADE_COL,grades[i]);
db.insert(TABLE_NAME,null,values);
}
但它也没有用。