2015-09-10 4 views
1

Я пытаюсь загрузить имена моих сотрудников из моего SQL к моей блесне, но вместо того, чтобы это то, что я получаю:Загрузка данные из SQLite в Spinner

enter image description here

Как вы можете видеть, каталог моего приложения является вместо этого загружается, и я понятия не имею, почему.

Моя активность:

public class AddAbsenceForm extends Activity implements OnItemSelectedListener { 

Spinner spinner; 
Button buttonAdd; 

public void onCreate (Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_absence_form); 

    //spinner element 
    spinner = (Spinner) findViewById(R.id.names_spinner); 

    //spinner click listener 
    spinner.setOnItemSelectedListener(this); 
    //loading spinner data from database 
    loadSpinnerData(); 

} 

private void loadSpinnerData() { 
    //database handler 
    LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext()); 
    //spinner drop down elements 
    List<DataBean> list = db.getAllDat(); 
    //creating adapter for spinner 
    ArrayAdapter<DataBean > dataAdapter = new ArrayAdapter<DataBean>(this, android.R.layout.simple_spinner_dropdown_item, list); 
    //drop down layout style - list view with radio button 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    //attaching data adapter to spinner 
    spinner.setAdapter(dataAdapter); 
} 

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    // On selecting a spinner item 
    String list = parent.getItemAtPosition(position).toString(); 
    //showing selected spinner item 
    Toast.makeText(parent.getContext(), "You selected: " + list, Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 

} 

} 

метод База данных:

public List <DataBean> getAllDat(){ 

    List<DataBean> list = new ArrayList<>(); 

    SQLiteDatabase db = helper.getReadableDatabase(); 

    String [] columns = {LysandrosHelper.UID, LysandrosHelper.NAME, LysandrosHelper.SURNAME, LysandrosHelper.DEPARTMENT, LysandrosHelper.WORKPLACE}; 
    Cursor cursor = db.query(LysandrosHelper.TABLE_NAME, columns, null, null, null, null, null); 

    while (cursor.moveToNext()) { 

     int index = cursor.getColumnIndex(LysandrosHelper.UID); 
     int index2 = cursor.getColumnIndex(LysandrosHelper.NAME); 
     int index3 = cursor.getColumnIndex(LysandrosHelper.SURNAME); 
     int index4 = cursor.getColumnIndex(LysandrosHelper.DEPARTMENT); 
     int index5 = cursor.getColumnIndex(LysandrosHelper.WORKPLACE); 
     int cid = cursor.getInt(index); 

     String persoName = cursor.getString(index2); 
     String personSurname = cursor.getString(index3); 
     String personDepartment = cursor.getString(index4); 
     String personWorkplace = cursor.getString(index5); 

     DataBean bean = new DataBean(cid, persoName, personSurname, personDepartment, personWorkplace); 
     list.add(bean); 
    } 

    return list; 
} 

Spinner в XML:

<Spinner 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/names_spinner" 
     android:text="@string/select_employee"> 
    </Spinner> 

Пожалуйста, кто-нибудь сказать мне, что я пропускаю

EDIT:

Мой DataBean класс:

public class DataBean { 

protected int id; 
protected String name; 
protected String surname; 
protected String department; 
protected String workplace; 


public DataBean() { 

} 

public DataBean (int id, String name, String surname, String department, String workplace) { 
    this.id = id; 
    this.name = name; 
    this.surname = surname; 
    this.department = department; 
    this.workplace = workplace; 
} 

public DataBean (String name, String surname, String department, String workplace) { 
    this.name = name; 
    this.surname = surname; 
    this.department = department; 
    this.workplace = workplace; 
} 

public int getID() { 
    return this.id; 
} 

public String getName() { 
    return this. name; 
} 

public String getSurname() { 
    return this.surname; 
} 

public String getDepartment() { 
    return this.department; 
} 

public String getWorkplace() { 
    return this.workplace; 
} 
} 

EDIT 2: Моя раскладка меняется на это .. enter image description here

+1

перейдите для «пользовательского адаптера», так как ваш 'list' не является' строковым массивом' его 'custom list' – Rustam

+0

, пожалуйста, объясните немного больше? Я довольно новый –

+0

PLS опубликовать свой класс DataBean – Rajesh

ответ

2

заменить метод loadSpinnerData() с этим, если вы хотите отобразить только имя в противном случае пойти на Custome Adapter

private void loadSpinnerData() { 
    //database handler 
    LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext()); 
    //spinner drop down elements 
    List<DataBean> list = db.getAllDat(); 
    //creating adapter for spinner 
    String[] nameList=new String[list.size()]; 

    for(int i=0;i<list.size();i++){ 
     nameList[i]=list.get(i).getName(); //create array of name 
    } 
      ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, nameList); 
    //drop down layout style - list view with radio button 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    //attaching data adapter to spinner 
    spinner.setAdapter(dataAdapter); 
} 
+0

Я действительно близко, но можете ли вы, пожалуйста, немного объяснить, как создать массив имен? –

+0

Подождите, пока я изучу некоторые обучающие программы, которые могут работать с вашим кодом. –

+0

check 'nameList' - это массив имени, извлеченный из вашего' DataBean list' – Rustam

0

Создать пользовательский адаптер, который расширяет ArrayAdapter.

public class MyAdapter extends ArrayAdapter<DataBean>{ 

Context context; 
int layoutResourceId;  
ArrayList<DataBean> data; 

public MyAdapter(Context context, int layoutResourceId, ArrayList<DataBean> data) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ViewHolder holder = null; 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new ViewHolder(); 
     holder.persoName = (TextView)row.findViewById(R.id.persoName); 
     row.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder)row.getTag(); 
    } 

    holder.persoName.setText(list.get(position).getName()); 

    return row; 
} 

static class ViewHolder 
{ 
    TextView persoName; 
} 
} 

Это xml-файл для элемента списка счетчиков.

spinner_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" 
android:padding="10dp" > 

<TextView 
    android:id="@+id/persoName" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_marginBottom="5dp" 
    android:layout_marginTop="5dp" 
    android:layout_weight="70" 
    android:text="Name" 
    android:textColor="#000000" 
    android:textSize="22sp" 
    android:textStyle="bold" /> 

</LinearLayout> 

Здесь я дал пример только одной строки данных.

затем используйте его следующим образом.

private void loadSpinnerData() { 
    //database handler 
    LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext()); 
    //spinner drop down elements 
    ArrayList<DataBean> list = db.getAllDat(); 
    //creating adapter for spinner 
    MyAdapter<DataBean > dataAdapter = new MyAdapter<DataBean>(this, R.layout.spinner_list_item, list); 
    //drop down layout style - list view with radio button 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    //attaching data adapter to spinner 
    spinner.setAdapter(dataAdapter); 
} 

Вы можете передать этот link, чтобы проверить, как использовать пользовательский адаптер.

+0

Спасибо за ввод. Я начну и попробую это –

+0

ty также для кода, который он пригодится в будущем –

Смежные вопросы