首页 > 解决方案 > Select Query ArrayList java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

问题描述

我收到此错误:

“java.lang.IndexOutOfBoundsException:索引 0 无效,大小为 0”。

我有 DatabaseHelper、Select 和 Insert Classes。所以我试图从 DatabaseHelper 类中获取数据以显示在 Search(Select)Class 上。我在 DatabaseHelper 上将“UrunKodu”声明为列名,但我不知道接下来要做什么来连接它我的搜索类中的“UrunKodu”声明。


这是数据库助手

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "Urunler.db";
private static final String TABLE_NAME = "urunler_tablosu";
private static final String COL_2 = "UrunKodu";
private static final String COL_3 = "UrunAdi";
private static final String COL_4 = "Adet";              
private static final String COL_5 = "AlisFiyati";
private static final String COL_6 = "SatisFiyati";
private ArrayList<HashMap<String, String>> YourList = new ArrayList<>();


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

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_NAME +" (UrunKodu TEXT,UrunAdi TEXT,Adet REAL,AlisFiyati REAL,SatisFiyati REAL )");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS urunler_tablosu");
    onCreate(db);
}


boolean insertData(String ukodu, String uadi, String adet, String afiyati, String sfiyati){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2,ukodu);
    contentValues.put(COL_3,uadi);
    contentValues.put(COL_4,adet);
    contentValues.put(COL_5,afiyati);
    contentValues.put(COL_6,sfiyati);
    long result = db.insert(TABLE_NAME,null,contentValues);
    return result != -1;
}

//Get all item in your database
public ArrayList<HashMap<String, String>> getAllDatabaseData(String UrunKodu) { // we use the id to find it corresponding user details
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery(" SELECT * FROM '" + TABLE_NAME + "' WHERE UrunKodu='" + UrunKodu + "'",null);
    res.moveToFirst();
    while(!res.isAfterLast()){
        HashMap<String, String> array_list = new HashMap<>();
        array_list.put("Urunkodu",res.getString(res.getColumnIndex(COL_2)));
        array_list.put("UrunAdi",res.getString(res.getColumnIndex(COL_3)));
        array_list.put("Adet",res.getString(res.getColumnIndex(COL_4)));
        array_list.put("AlisFiyati",res.getString(res.getColumnIndex(COL_5)));
        array_list.put("SatisFiyati",res.getString(res.getColumnIndex(COL_6)));
        YourList.add(array_list);
        res.moveToNext();
    }
    return YourList;

}

}


这是搜索(选择类)


public class UrunKontrol extends AppCompatActivity {

private ArrayList<HashMap<String, String >>DataList = new ArrayList<>();
EditText editkontukodu,editkontuadi,editkontadet,editkontafiyati,editkontsfiyati;
Button arabuton;

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

    editkontukodu = (EditText)findViewById(R.id.kontrolbarkodno);
    editkontuadi = (EditText)findViewById(R.id.kontrolurunadi);
    editkontadet = (EditText)findViewById(R.id.kontrolurunadeti);
    editkontafiyati = (EditText)findViewById(R.id.kontrolurunalisfiyati);
    editkontsfiyati = (EditText)findViewById(R.id.kontrolurunsatisfiyati);
    arabuton = (Button)findViewById(R.id.aramabutonu);
    arabuton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DataList = new DatabaseHelper(UrunKontrol.this).getAllDatabaseData(UrunKodu);   //Here I am getting error
            editkontuadi.setText(DataList.get(0).get("UrunAdi"));
            editkontadet.setText(DataList.get(0).get("Adet"));
            editkontafiyati.setText(DataList.get(0).get("AlisFiyati"));
            editkontsfiyati.setText(DataList.get(0).get("SatisFiyati"));
        }
    });

}

}


这是插入类


public class Urunkayit extends AppCompatActivity {

DatabaseHelper myDb;
EditText editkayitbarkodno,editkontrolurunadi,editkontrolurunadeti,editkontrolurunalisfiyati,editkontrolurunsatisfiyati;
Button kaydetbuton;

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

    myDb = new DatabaseHelper(this);

    editkayitbarkodno = (EditText)findViewById(R.id.kayitbarkodno);
    editkontrolurunadi = (EditText)findViewById(R.id.kayiturunadi);
    editkontrolurunadeti = (EditText)findViewById(R.id.kayiturunadeti);
    editkontrolurunalisfiyati = (EditText)findViewById(R.id.kayiturunalisfiyati);
    editkontrolurunsatisfiyati = (EditText)findViewById(R.id.kayiturunsatisfiyati);
    kaydetbuton = (Button) findViewById(R.id.kayitbutonu);

    urunKaydetme();

}
public void urunKaydetme(){
    kaydetbuton.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isInserted = myDb.insertData(editkayitbarkodno.getText().toString(),
                            editkontrolurunadi.getText().toString(),
                            editkontrolurunadeti.getText().toString(),
                            editkontrolurunalisfiyati.getText().toString(),
                            editkontrolurunsatisfiyati.getText().toString());
                    if (isInserted = true){
                        Toast.makeText(Urunkayit.this,"Ürün Kaydedildi",Toast.LENGTH_LONG).show();
                        editkayitbarkodno.setText("");
                        editkontrolurunadi.setText("");
                        editkontrolurunadeti.setText("");
                        editkontrolurunalisfiyati.setText("");
                        editkontrolurunsatisfiyati.setText("");

                    }
                    else
                        Toast.makeText(Urunkayit.this,"Ürün Kaydedilemedi",Toast.LENGTH_LONG).show();
                }
            }
    );
}

}


我不知道如何在搜索类中声明它们(大小和 UrunKodu)

在此处输入图像描述

标签: androidsqliteindexoutofboundsexception

解决方案


您的DataList返回空列表,在访问它之前检查大小

arabuton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        DataList = new DatabaseHelper(UrunKontrol.this).getAllDatabaseData(UrunKodu);   //Here I am getting error
        if(DataList.size > 0){
          editkontuadi.setText(DataList.get(0).get("UrunAdi"));
          editkontadet.setText(DataList.get(0).get("Adet"));
          editkontafiyati.setText(DataList.get(0).get("AlisFiyati"));
          editkontsfiyati.setText(DataList.get(0).get("SatisFiyati"));
        }
    }
});

注意:还要调试您尝试获取的值是否存在于数据库中


推荐阅读