0

Я получаю проблемы при обработке значения ArrayList из значения списка базы данных enter image description hereListView из SQLite с помощью CustomAdapter


В принципе у меня есть две ошибок:

  • Выше показан один
  • One от LogCat (String resource ID #0x1)

CustomAdapter класс:

public class IncomeListAdaptor extends ArrayAdapter<Income>{ 

Context context; 
int layoutResourceId; 
List<Income> incomeList; 

public IncomeListAdaptor(Context context, int layoutResourceId, ArrayList<Income> objects) { 
    super(context, layoutResourceId, objects); 
    this.context = context; 
    this.layoutResourceId = layoutResourceId; 
    this.incomeList = objects; 
} 

@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.txtId = (TextView)row.findViewById(R.id.idItem); 
     holder.txtDate = (TextView) row.findViewById(R.id.dateItem); 
     holder.txtAmount = (TextView) row.findViewById(R.id.amountItem); 
     row.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder)row.getTag(); 
    } 

    Income income = incomeList.get(position); 
    holder.txtId.setText(income.getIncomeid()); 
    holder.txtAmount.setText(income.getAmount()); 
    holder.txtSource.setText(income.getSource()); 
    return row; 
} 

static class ViewHolder { 
    TextView txtId; 
    TextView txtAmount; 
    TextView txtSource; 

}} 

Список баз данных Функция

 /** 
    * getting all income 
    * */ 

    public List<Income> getAllIncomes() { 
     List<Income> incomes = new ArrayList<Income>(); 
     String selectQuery = "SELECT * FROM " + TABLE_INCOME; 

     Log.e(LOG, selectQuery); 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor c = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (c.moveToFirst()) { 
      do { 
       Income in = new Income(); 
       in.setIncomeid(c.getInt(c.getColumnIndex(KEY_INCOME_ID))); 
       in.setAmount(c.getInt(c.getColumnIndex(KEY_AMOUNT))); 
       in.setSource(c.getString(c.getColumnIndex(KEY_SOURCE))); 
       in.setCdate(c.getString(c.getColumnIndex(KEY_CDATE))); 
       in.setPayementmode(c.getString(c.getColumnIndex(KEY_PAYEMENT_MODE))); 

       // adding to income list 
       incomes.add(in); 
      } while (c.moveToNext()); 
     } 

     return incomes; 
    } 

Fragment1.java класс

 mIncomeList = (ListView)view.findViewById(R.id.incomelist); 
    List<Income> values = db.getAllIncomes(); 
    IncomeListAdaptor adapter = new IncomeListAdaptor(getActivity(), R.layout.income_list_item_genrator, values); 
    mIncomeList.setAdapter(adapter); 

LogCat Ошибка:

12-03 01:03:23.141: E/AndroidRuntime(17560): FATAL EXCEPTION: main 
12-03 01:03:23.141: E/AndroidRuntime(17560): android.content.res.Resources$NotFoundException: String resource ID #0x1 
12-03 01:03:23.141: E/AndroidRuntime(17560): at android.content.res.Resources.getText(Resources.java:201) 
12-03 01:03:23.141: E/AndroidRuntime(17560): at android.widget.TextView.setText(TextView.java:2961) 
12-03 01:03:23.141: E/AndroidRuntime(17560): at parth.any.ttb.adapter.IncomeListAdaptor.getView(IncomeListAdaptor.java:53) 
+1

Ну, вы, конструктор, ожидаете 'ArrayList', но вы даете ему« Список », вместо этого вы пытаетесь дать ему ArrayList? – tyczj

+0

Да Но, делая это, я все еще получаю вторую ошибку logCat, как я объяснил .. !! – arraystack

+0

где линия 53 в вашем адаптере? – tyczj

ответ

0

Изменить следующую строку:

public IncomeListAdaptor(Context context, int layoutResourceId, ArrayList<Income> objects) { 

в

public IncomeListAdaptor(Context context, int layoutResourceId, List<Income> objects) { 

IncomeListAdaptor в вашем классе.

Причина

вы передаете List конструктору, ожидающий ArrayList.
ArrayList является одним видом List. Таким образом, вы не можете просто иметь List (который вы не знаете его точный тип) и передать его в метод, который ожидает, что точный типArrayList

Более точное объяснение

List является interface, который имеет множество разработчиков. Один из этих разработчиков - ArrayList. Таким образом, когда метод ожидает ArrayList, он запрашивает конкретный, а не любой.

0

И для ошибки

android.content.res.Resources$NotFoundException: String resource ID #0x1 

, убедитесь, что значения, которые вы пытаетесь SetText() на самом деле Строковые типы данных.

i.е в

holder.txtId.setText(income.getIncomeid()); 
holder.txtAmount.setText(income.getAmount()); 
holder.txtSource.setText(income.getSource()); 

makre уверен, что income.getIncomeid() и income.getAmount() и income.getSource() фактически строк. Если они не преобразуют их в строки, используя соответствующие методы, такие как String.valueOf(income.getAmount()); и т. Д.

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