当tab []不同时,tab2 []中的值是相同的

时间:2016-09-21 14:45:33

标签: android sql arrays arraylist spinner

我想从sql db中填充spinner: 到目前为止,在tab []中,我得到了所有我需要的东西+某些元素的空值。 所以我试图将数组重写为没有null元素的新数组。 但到目前为止,我使用tab []中的第一个值来管理填充微调器。 我的意思是tab2 []的大小正确,但所有元素都是tab [0]的副本。 怎么了?

public void zrob(){
Spinner spinner= (Spinner) findViewById(R.id.spinner2);
Spinner spinner1= (Spinner) findViewById(R.id.spinner);
String string = spinner.getSelectedItem().toString();
String string1= new String();
String string2= new String();
DataBaseHelper dataBaseHelper= new DataBaseHelper(this);
Cursor cursor= dataBaseHelper.getReadableDatabase().rawQuery("SELECT * FROM BusPlan",null);
int count= cursor.getCount();
String tab []= new String[count];

cursor.moveToFirst();
for (int i =0;count>i;i++) {
    string1 = cursor.getString(cursor.getColumnIndex("Linie_Nummer"));
    if (string.equals(string1)) {
        tab[i] = cursor.getString(cursor.getColumnIndex("Bushaltestelle"));
        cursor.moveToNext();
    } else {
        cursor.moveToNext();
    }
}
cursor.close();
dataBaseHelper.close();
int c=0;
for (int j=0; count>j;j++){
    if (tab[j]!=null){c=c+1;}
}
String tab2 []= new String[c];
for (int k=0; count>k;k++){
    if (tab[k]!=null){
        for (int l=0;l<c;l++)
            if (tab2[l]==null){
                tab2[l]=tab[k];
            }
    }
}
TextView tv =(TextView) findViewById(R.id.textView);
tv.setText(tab2[3]);

List<String> stringList = new ArrayList<String>(Arrays.asList(tab2));
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(Bodo.this, android.R.layout.simple_spinner_item, tab2); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(spinnerArrayAdapter);

}

1 个答案:

答案 0 :(得分:1)

你的问题在这里:

for (int k=0; count>k;k++){
    if (tab[k]!=null){
        for (int l=0;l<c;l++)
            if (tab2[l]==null){
                tab2[l]=tab[k];
            }
        }
    }
}

内循环不是必需的。在外循环(k==0)的第一次运行中,内循环将以l = 0开始,并且所有值都是null,它将使用tab [0]填充tab2。

解决方案是为制表符创建一个单独的计数器,每次分配其中一个值时,该计数器会手动递增:

int counter = 0;
for (int k=0; count>k;k++){
    if (tab[k]!=null) {
        tab2[counter] = tab[k];
        counter++;
    }
}