2014-12-07 5 views
0

В основном задании Я определил кнопки и поместил их в onclicklistener. Проблема в кнопке viewAll, когда я хочу, чтобы заполнить представление списка из базы данных Так что я называю метод db.getAllContacts(), но код не работаетЗаполнение ListView из базы данных

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     name = (EditText)findViewById(R.id.editText1); 
     phone = (EditText)findViewById(R.id.editText2); 
     btnViewAll=(Button)findViewById(R.id.button1); 
     btnAdd=(Button)findViewById(R.id.button2); 
     btnAdd.setOnClickListener(this); 
     btnViewAll.setOnClickListener(this); 

    } 

@Override 
    public void onClick(View view) { 
    MySQLiteHelper db = new MySQLiteHelper(this); 
if(view==btnViewAll) { 
     if(name.getText().toString().trim().length()==0 || phone.getText().toString().trim().length()==0) 
     { 
      showMessage("Error", "Please enter all values"); 
      return; 
     } 
     else{ 
      List<Contact> contact = new ArrayList<Contact>(); 
      contact= db.getAllContacts();  
      ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, contact); 
      ListView listContent = (ListView)findViewById(R.id.List); 
      listContent.setAdapter(adapter); 
     } 
    } 
} 

    public void showMessage(String title,String message) 
    { 
     Builder builder=new Builder(this); 
     builder.setCancelable(true); 
     builder.setTitle(title); 
     builder.setMessage(message); 
     builder.show(); 
    } 
    public void clearText() 
    { 
     name.setText(""); 
     phone.setText(""); 
    } 

В файле SQLiteHelper:

public List<Contact> getAllContacts() { 
     List<Contact> contactList = new ArrayList<Contact>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM contact"; 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
      Contact contact = new Contact(); 
      contact.setId(Integer.parseInt(cursor.getString(0))); 
      contact.setName(cursor.getString(1)); 
      contact.setPhone(cursor.getString(2)); 
      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    }// return contact list 
    return contactList;} 

Помогите мне

+0

Используйте CursorAdapter вместо этого. – Nazgul

+0

Вы должны использовать customAdapter для своего списка контактов –

+0

И проверить журнал метода getAllContacts(), чтобы он возвращал список контактов или нет из базы данных. –

ответ

0

Логика объекта доступа к базе данных в порядке. Основная проблема заключается в адаптере массива. Вы должны попытаться реализовать ListAdapter в своей деятельности, вместо того, чтобы использовать что ArrayAdapter

+0

Можете ли вы мне помочь, как я могу это сделать? Я новичок – user3552658

+0

сменить listContent.setAdapter (адаптер); в listContent.setAdapter (это); IDE должна предложить вам реализовать ListAdapter в Activity. Затем реализовать метод в соответствии с документацией –

1

Удалить эту линию: -

ArrayAdapter адаптер = новый ArrayAdapter (это, android.R.layout.simple_list_item_1, контакт);

и добавить: -

ContactListAdapter contactListAdapter = новый ContactListAdapter (это, R.layout.contact_list_item, контакт);

ContactListAdapter Класс: -

public class ContactListAdapter extends ArrayAdapter<Contact> { 
// Declare Variables 
Context context; 
LayoutInflater inflater; 
List<Contact> contactlist; 

public ContactListAdapter(Context context, int resourceId, 
     List<Contact> contactlist) { 
    super(context, resourceId, contactlist); 

    this.context = context; 
    this.contactlist = contactlist; 
    inflater = LayoutInflater.from(context); 
} 

private class ViewHolder { 
    TextView contactId; 
    TextView contactName; 
    TextView contactPhone; 


} 

public View getView(int position, View view, ViewGroup parent) { 
    final ViewHolder holder; 
    if (view == null) { 
     holder = new ViewHolder(); 
     view = inflater.inflate(R.layout.contact_list_item, null); 
     // Locate the TextViews in listview_item.xml 
     holder.contactName = (TextView) view.findViewById(R.id.contact_id); 
     holder.contactName = (TextView) view.findViewById(R.id.contact_name); 
     holder.contactPhone = (TextView) view.findViewById(R.id.contact_phone); 

     view.setTag(holder); 
    } else { 
     holder = (ViewHolder) view.getTag(); 
    } 
    // Capture position and set to the TextViews 
    holder.contactId.setText(contactlist.get(position).getContactId()); 
    holder.contactName.setText(contactlist.get(position).getContactName()); 
    holder.contactPhone.setText(contactlist.get(position).getContactPhone()); 


    return view; 
} 

}

и contact_list_item.xml: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:padding="10dp"> 

<TextView 
    android:id="@+id/contact_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:text="test"/> 

<TextView 
    android:id="@+id/contact_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:text="test"/> 

<TextView 
    android:id="@+id/contact_phone" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 

+0

Спасибо .. но этот код дает мне ошибку: ContactListAdapter contactListAdapter = new ContactListAdapter (это, R.layout.contact_list_item, контакт); Он говорит, что конструктор не задан – user3552658

+0

Проверьте свой 3 параметр, который вы передаете в конструкторе. Все они возвращают требуемое значение или нет. который я определил в классе ContactListAdapter –

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