получение данных из базы данных в просмотр списка - PullRequest
0 голосов
/ 18 марта 2012

Я передаю данные из строк БД и хочу отобразить их в виде списка. Представьте, что я приношу имена и телефоны, поэтому я хочу, чтобы в каждой строке списка имелся телефон и имя.

Пока это мой код: (элементы поднимаются нормально, я вижу их с помощью system.out. Ptintln). Так что в информации [0] у меня есть имя, а в информации [1] у меня есть телефон.

это мой код адаптера.

    public class FacilitiesAdapter extends ArrayAdapter<String> {
        private final Context context;
        private String data[] = null;

        public FacilitiesAdapter(Context context, String[] data)  {
            super(context, R.layout.expand_row);
            this.context = context;
            this.data = data;

        }
         public View getView(int position, View convertView, ViewGroup parent) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View rowView = inflater.inflate(R.layout.expand_row, parent, false);
                TextView textView = (TextView) rowView.findViewById(R.id.name);
                System.out.println("I am in the adapter "+data[0]);
                textView.setText(data[0]);
TextView textView2 = (TextView) rowView.findViewById(R.id.phone);
textView2.setText(data[1]);
                return rowView;
         }
}

Итак, я полагаю, что с помощью приведенного выше кода я должен видеть в каждой строке данные 0 и данные [1] (телефон)? Но я не прав. Почему это так?

Это мой javacode:

JSONArray jArray = new JSONArray(result);
         for(int i=0;i<jArray.length();i++){
             //each line fetches a line of the table
                JSONObject json_data = jArray.getJSONObject(i);
                if (json_data.getString("Name")!=null)  info[0]=json_data.getString("Name");
                if (json_data.getString("Phone")!=null) info[1]=json_data.getString("Phone");

                FacilitiesAdapter adapter = new FacilitiesAdapter(this,info);
                System.out.println(info[0]);
                setListAdapter(adapter);

1 Ответ

2 голосов
/ 18 марта 2012

Вы делаете setListAdapter в цикле, что странно, и я уверен, что это не то, что вы намеревались сделать. Вам нужно только заполнить строковый массив вашими данными и инициализировать свой объектAdAdter с строковым массивом списком строкового массива и выполните setListAdapter один раз .

EDIT:

Я думаю, вы неправильно поняли концепцию адаптера: адаптер предназначен для хранения данных для всего AdapterView, который является родительским классом ListView, а не для хранения данных для одного элемента в AdapterView.

Вам понадобится List из String[] для вашего адаптера, что-то вроде следующего:

public FacilitiesAdapter ... {
    List<String[]> dataList;
    public FacilitiesAdapter (List<String[]> dataList) {
        this.dataList = dataList;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        String[] data = dataList.get(position);
        // set your data to the views.
    }
}

РЕДАКТИРОВАТЬ 2:

List<String[]> listData = new ArrayList<String[]>();
for(int i = 0; i < jArray.length(); ++i) {
    JSONObject json_data = jArray.getJSONObject(i);
    String name = json_data.getString("Name");
    String phone = json_data.getString("Phone");
    //... some code to check *nullity* of name and phone
    listData.add(new String[]{name, phone});
}    

Приведенный выше код заполнит listData именами и телефонами (хранящимися в массиве), полученными из JSONObject. И теперь вы можете передать этот listData в качестве параметра конструктору вашего адаптера.

Если вы все еще не получаете его, вам нужна книга по языку программирования Java, освоение которого до использования языка для программирования Android поможет вам лучше изучить другие вещи.

...