android - 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)
解决方案
您的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"));
}
}
});
注意:还要调试您尝试获取的值是否存在于数据库中
推荐阅读
- angular - 如何隐藏 ngx-bootstrap 模态而不破坏模态组件?
- mysql - 从 Aurora Serverless 导出到 S3
- powerbi - Power BI:切片器以选择表中的值
- haskell - 对特定实例的使用发出警告
- nginx - 当使用标头 Cache-control: no-cache 请求时,nginx 是否会重置 URL 的缓存?
- ruby-on-rails - Rails 6 ActiveJob 未定义常量 ActionMailer::MailDeliveryJob
- javascript - 有没有办法在悬停时更改条形图中单元格的填充?- 图表
- typescript - 如何在 nativeScript 中使用 fusionAuth 库?
- r - R - 包含字符序列的列表元素的位置
- python - Boto3 List 对象在分隔符后添加额外的字符串