2017-01-12 16 views
1

我正在開發一個應用程序,以便在數據庫中列出詳細信息。該列表不起作用。但它在日誌中顯示爲罰款。爲什麼我的回收查看清單不起作用。當我使用bean1 = new Bean(cn.getName(),cn.getNumber(),cn.getSpeeddial())時,它顯示錯誤。使用數據庫不工作的Android recyleview列表

我的代碼如下所示。

SpeedDialViewActivity.java

public class SpeedDialViewActivity extends AppCompatActivity { 

    private List<Bean> beanList = new ArrayList<>(); 
    private RecyclerView recyclerView; 
    private ViewAdapter mAdapter; 
    Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_speed_dial_view); 
     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     mAdapter = new ViewAdapter(beanList); 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(mAdapter); 

     prepareData(); 


    } 

    private void prepareData() { 

     DatabaseHandler handler = new DatabaseHandler(getApplicationContext()); 
     Log.d("Reading: ", "Reading all contacts.."); 
     List<Bean> beanList = handler.getAllContacts(); 
     //Cursor cursor = (Cursor) handler.getAllContacts(); 

     //Bean bean1; 

     for (Bean cn : beanList) { 
      String log = "Id: " + cn.getId() + " ,Name: " + cn.getName() + " ,Phone: " + cn.getNumber(); 
      // Writing Contacts to log 
      Log.d("Name: ", log); 



      // bean1 = new Bean(cn.getName(), cn.getNumber(), cn.getSpeeddial()); // Error occurring 
      // beanList.add(bean1); 
      } 

    } 
    } 

    DatabaseHandler.java 

    public class DatabaseHandler extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "speeddial"; 
    private static final String TABLE_CONTACTS = "contacts"; 
    private static final String KEY_ID = "id"; 
    private static final String KEY_NAME = "name"; 
    private static final String KEY_PH_NO = "phone_number"; 
    private static final String KEY_SPEED_DIAL = "speed_dial_number"; 

    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" 
       + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
       + KEY_PH_NO + " TEXT" + KEY_SPEED_DIAL + " TEXT" + ")"; 
     db.execSQL(CREATE_CONTACTS_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 

     // Create tables again 
     onCreate(db); 
    } 

    void addContact(Bean bean) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, bean.getName()); // Contact Name 
     values.put(KEY_PH_NO, bean.getNumber()); // Contact Phone 
     values.put(KEY_PH_NO, bean.getSpeeddial()); // Contact Phone 

     // Inserting Row 
     db.insert(TABLE_CONTACTS, null, values); 
     db.close(); // Closing database connection 
    } 

    Bean getBean(int id) { 
     SQLiteDatabase db = this.getReadableDatabase(); 

     Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, 
         KEY_NAME, KEY_PH_NO }, KEY_ID + "=?", 
       new String[] { String.valueOf(id) }, null, null, null, null); 
     if (cursor != null) 
      cursor.moveToFirst(); 

     Bean bean = new Bean(Integer.parseInt(cursor.getString(0)),cursor.getString(1), cursor.getString(2), cursor.getString(3)); 
     // return contact 
     return bean; 
    } 

    public List<Bean> getAllContacts() { 
     List<Bean> contactList = new ArrayList<Bean>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Bean contact = new Bean(); 
       contact.setId(Integer.parseInt(cursor.getString(0))); 
       contact.setName(cursor.getString(1)); 
       contact.setNumber(cursor.getString(2)); 
       // Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return contactList; 
    } 
    } 

ViewAdapter.java

public class ViewAdapter extends RecyclerView.Adapter<ViewAdapter.MyViewHolder> { 

private List<Bean> beanList; 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView name, number, speeddial_number; 

    public MyViewHolder(View view) { 
     super(view); 
     name = (TextView) view.findViewById(R.id.name); 
     number = (TextView) view.findViewById(R.id.number); 
     speeddial_number = (TextView) view.findViewById(R.id.speeddialNumber); 
    } 
} 

public ViewAdapter(List<Bean> beanList){ 
    this.beanList = beanList; 
} 

@Override 
public ViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.speeddial_list_row, parent, false); 
    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(ViewAdapter.MyViewHolder holder, int position) { 
    Bean bean = beanList.get(position); 
    holder.name.setText(bean.getName()); 
    holder.number.setText(bean.getNumber()); 
    holder.speeddial_number.setText(bean.getSpeeddial()); 
} 

@Override 
public int getItemCount() { 
    return beanList.size(); 
} 
} 

Bean.java

public class Bean{ 
private int id; 
private String name; 
private String number; 
private String speeddial; 


public Bean(int id, String name, String number, String speeddial) { 
    this.id=id; 
    this.name=name; 
    this.number=number; 
    this.speeddial=speeddial; 
} 

public Bean(String name, String number, String speeddial) { 
    this.name=name; 
    this.number=number; 
    this.speeddial=speeddial; 
} 

public Bean() { 

} 


public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getNumber() { 
    return number; 
} 

public void setNumber(String number) { 
    this.number = number; 
} 

public String getSpeeddial() { 
    return speeddial; 
} 

public void setSpeeddial(String speeddial) { 
    this.speeddial = speeddial; 
} 
} 

的錯誤是了java.lang.RuntimeException:無法啓動活動ComponentInfo {com.app.appname/com.app.appname}:java .util.ConcurrentModificationException

請幫我

+1

發佈您的錯誤日誌。 –

+0

了java.lang.RuntimeException:無法啓動活動ComponentInfo {com.app.appname/com.app.appname}:java.util.ConcurrentModificationException –

回答

1

您不添加您在列表中獲取聯繫人,而不是做通知的數據集改變。更改onPrepare()方法如下

private void prepareData() { 

    DatabaseHandler handler = new DatabaseHandler(getApplicationContext()); 
    Log.d("Reading: ", "Reading all contacts.."); 
    List<Bean> beanList = handler.getAllContacts(); 
    this.beanList.addAll(beanList); 
    mAdapter.notifyDatasetChanged(); 

} 
+0

它顯示無法解析 'notifyDatasetChanged' –

+0

使用本mAdapter.notifyDataSetChanged(); –

0

傳遞prepareData(beanList)相同的列表,並在此列表中添加項目。在成功添加後,將您的方法更改爲類似prepareData(List<Bean> beanList>).的方法,只需調用mAdapter.notifyDataSetChanged()方法,以便您的適配器可以知道某些項目已添加到列表中。

+0

它顯示無法解析'notifyDatasetChanged'。 –

+0

mAdapter.notifyDataSetChanged(); –

+0

請參閱編輯答案。 –

0

您還沒有在清單文件中的應用程序標籤中提及android:name。 所以你簡單的使用上下文對象或使用SpeedDialViewActivity.this

數據庫處理器處理器=新的數據庫處理器(mContext);

      or 

數據庫處理器處理新=數據庫處理器(SpeedDialViewActivity.this);

private void prepareData() { 

    DatabaseHandler handler = new DatabaseHandler(SpeedDialViewActivity.this); 
    Log.d("Reading: ", "Reading all contacts.."); 
    List<Bean> beanList = handler.getAllContacts(); 
    //Cursor cursor = (Cursor) handler.getAllContacts(); 

    //Bean bean1; 

    for (Bean cn : beanList) { 
     String log = "Id: " + cn.getId() + " ,Name: " + cn.getName() + " ,Phone: " + cn.getNumber(); 
     // Writing Contacts to log 
     Log.d("Name: ", log); 



     // bean1 = new Bean(cn.getName(), cn.getNumber(), cn.getSpeeddial()); // Error occurring 
     // beanList.add(bean1); 
     } 

} 
相關問題