Android Studio中的Update方法返回java.lang.IndexOutOfBoundsException:索引0无效,大小为0

时间:2017-12-12 23:40:54

标签: java android sqlite

我有一个在更新表时使用外键的应用程序。我希望能够放下他们的电子邮件,而不是使用他们的号码。

这是数据库方法:

    private int getIdFromName(String email) {
        SQLiteDatabase db = this.getWritableDatabase();
        ArrayList<Integer> refs = new ArrayList<>();
        Cursor cursor;

        cursor = db.rawQuery("select " + REFEREE_EMAIL_COL + " from " +
                REF_TABLE + " where " + REFEREE_EMAIL_COL + "='" + email + "'", null);

        while (cursor.moveToNext()){
            refs.add(cursor.getInt(0));
        }

        return refs.get(0);
    }

   public boolean updateRef(String email)
   {
       SQLiteDatabase db = this.getWritableDatabase();
       ContentValues values = new ContentValues();

       int ref_id = getIdFromName(email);

       values.put(REFEREE_ID_COL, ref_id);

       db.insert(MATCH_TABLE, null, values);
       return true;
   }

这就是我所说的:

public class UpdateMatchActivity extends AppCompatActivity {

private static final String TAG = "EditDataActivity";

private Button btnSave,btnDelete;
private EditText homeTeamEdit, awayTeamEdit, typeOfMatchEdit, redCardsEdit, bookingsEdit, groundEdit, refEdit, dateEdit, timeEdit,
        awayScoreEdit, homeScoreEdit;
DBHandler mDatabaseHelper;

private String homeTeam, awayTeam, homeScore, awayScore;
private String typeOfMatch;
private String ref;
private String redCards, bookings;
private String date, time;
private String ground;
private int selectedID;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_match);
    btnSave = (Button) findViewById(R.id.UpdateMatchButton);
    homeTeamEdit = (EditText) findViewById(R.id.HomeTeamUpdate);
    homeScoreEdit = (EditText) findViewById(R.id.updateHomeScore);
    awayTeamEdit = (EditText) findViewById(R.id.AwayTeamUpdate);
    awayScoreEdit = (EditText) findViewById(R.id.updateAwayScore);
    typeOfMatchEdit = (EditText) findViewById(R.id.updateTypeOfMatch);
    refEdit = (EditText) findViewById(R.id.updateRef);
    groundEdit = (EditText) findViewById(R.id.updateGround);
    refEdit = (EditText) findViewById(R.id.updateRef);

    ref = refEdit.getText().toString();

    mDatabaseHelper = new DBHandler(this);


    //get the intent extra from the ListDataActivity
    Intent receivedIntent = getIntent();

    //now get the itemID we passed as an extra
    selectedID = receivedIntent.getIntExtra("MatchId", -1); //NOTE: -1 is just the default value

    //now get the name we passed as an extra
    homeTeam = receivedIntent.getStringExtra("homeTeam");

    homeScore = receivedIntent.getStringExtra("homeScore");

    awayTeam = receivedIntent.getStringExtra("awayTeam");

    awayScore = receivedIntent.getStringExtra("awayScore");

    ground = receivedIntent.getStringExtra("ground");

    typeOfMatch = receivedIntent.getStringExtra("typeOfMatch");


    //set the text to show the current selected name
    homeTeamEdit.setText(homeTeam);
    awayTeamEdit.setText(awayTeam);
    typeOfMatchEdit.setText(typeOfMatch);
    groundEdit.setText(ground);
    homeScoreEdit.setText(homeScore);
    awayScoreEdit.setText(awayScore);

    btnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String item = refEdit.getText().toString();
            if(!mDatabaseHelper.checkIfRefExists(ref)) {
                mDatabaseHelper.updateRef(ref);

                toastMessage("Ref Updated");
            }
            else
            {
                toastMessage("No ref with that email");
            }
        }
    });
}

/**
 * customizable toast
 * @param message
 */
private void toastMessage(String message){
    Toast.makeText(this,message, Toast.LENGTH_SHORT).show();
}

}

我第一次创建时尝试使用getIdFromName方法,但是当我尝试更新它时,它会给我“java.lang.IndexOutOfBoundsException:索引0无效,大小为0                                                        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)                                                        在java.util.ArrayList.get(ArrayList.java:308)“

完全迷失在这里所以任何指导都会受到赞赏。

0 个答案:

没有答案