我正在尝试将字符串数组插入到 android

问题描述 投票:0回答:0

我正在尝试将字符串数组插入“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);
            }

但它也没有用。

java android arrays arraylist android-sqlite
© www.soinside.com 2019 - 2024. All rights reserved.