2017-06-05 78 views
0
public class Contact { 

// id 
int mNumber; 

String mMonth,mDate, mDay, mTime , mTitle , mContent; 
int mMood,mWeather; 

public Contact(){} 

public Contact(int number, String month, String date, String day, String time, String title, String content, int weather, int mood) { 
    mNumber=number; mMonth=month; mDay = day; mDate = date ; mTime = time; mTitle = title; mContent = content; mWeather = weather; mMood =mood; 
} 

public Contact(String month, String date, String day, String time, String title, String content, int weather, int mood) { 
    mMonth=month; mDay = day; mDate = date ; mTime = time; mTitle = title; mContent = content; mWeather = weather; mMood =mood; 
} 
public Contact(String month, String date, String day, String time, String title, String content) { 
    mMonth=month; mDay = day; mDate = date ; mTime = time; mTitle = title; mContent = content; 
} 


public int getmNumber() { 
    return mNumber; 
} 

public void setmNumber(int mNumber) { 
    this.mNumber = mNumber; 
} 

public String getmMonth() { 
    return mMonth; 
} 

public void setmMonth(String mMonth) { 
    this.mMonth = mMonth; 
} 

public String getmDate() { 
    return mDate; 
} 

public void setmDate(String mDate) { 
    this.mDate = mDate; 
} 

public String getmDay() { 
    return mDay; 
} 

public void setmDay(String mDay) { 
    this.mDay = mDay; 
} 

public String getmTime() { 
    return mTime; 
} 

public void setmTime(String mTime) { 
    this.mTime = mTime; 
} 

public String getmTitle() { 
    return mTitle; 
} 

public void setmTitle(String mTitle) { 
    this.mTitle = mTitle; 
} 

public String getmContent() { 
    return mContent; 
} 

public void setmContent(String mContent) { 
    this.mContent = mContent; 
} 

public int getmMood() { 
    return mMood; 
} 

public void setmMood(int mMood) { 
    this.mMood = mMood; 
} 

public int getmWeather() { 
    return mWeather; 
} 

public void setmWeather(int mWeather) { 
    this.mWeather = mWeather; 
} 
} 

Contact类是用于保存值使用RecyclerView与数据库

public class DBHelper extends SQLiteOpenHelper { 

public static final String DATABASE_NAME = "Calendar.db"; 

//Table Name 
public static final String D_TABLE_NAME = "Diary"; 

public static final String D_COL_1 = "m_Number"; //id 
public static final String D_COL_2 = "m_Title"; 
public static final String D_COL_3 = "m_Content"; 
public static final String D_COL_4 = "m_Month"; 
public static final String D_COL_5 = "m_Date";  
public static final String D_COL_6 = "m_Day"; 
public static final String D_COL_7 = "m_Time";   
public static final String D_COL_8 = "m_Mood"; //image 
public static final String D_COL_9 = "m_Weather"; //image 

public DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 

    db.execSQL("CREATE TABLE "+D_TABLE_NAME+"("+D_COL_1+" INTEGER PRIMARY KEY AUTOINCREMENT, "+D_COL_2+" TEXT, "+D_COL_3+" TEXT, "+D_COL_4+" TEXT, " 
       +D_COL_5+" TEXT, "+D_COL_6+" TEXT, "+D_COL_7+ " TEXT, "+D_COL_8+" INTEGER, "+D_COL_9+" INTEGER);"); 


} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("drop table if exists"+TABLE_NAME); 
    onCreate(db); 
} 


//Insert new Data 
public void addContact(Contact contact){ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues contentValues = new ContentValues(); 
    contentValues.put(D_COL_2,contact.getmTitle()); 
    contentValues.put(D_COL_3,contact.getmContent()); 
    contentValues.put(D_COL_4,contact.getmMonth()); 
    contentValues.put(D_COL_5,contact.getmDate()); 
    contentValues.put(D_COL_6,contact.getmDay()); 
    contentValues.put(D_COL_7,contact.getmTime()); 
    contentValues.put(D_COL_8,contact.getmMood()); 
    contentValues.put(D_COL_9,contact.getmWeather()); 

    db.insert(D_TABLE_NAME,null,contentValues); 
    db.close(); 

} // 

// mNumber to get Contact 
public Contact getContact(int mNumber) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(D_TABLE_NAME, new String[] { D_COL_1,D_COL_2,D_COL_3,D_COL_4,D_COL_5, 
        D_COL_6,D_COL_7,D_COL_8,D_COL_9 }, D_COL_1 + "=?", 
      new String[] { String.valueOf(mNumber) }, null, null, null, null); 
    if (cursor != null) 
     cursor.moveToFirst(); 

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1), cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6), 
      Integer.parseInt(cursor.getString(7)),Integer.parseInt(cursor.getString(8))); 
    return contact; 
} 

// All Contact information get 
public List<Contact> getAllContacts() { 
    List<Contact> contactList = new ArrayList<Contact>(); 

    // Select All Query 
    String selectQuery = "SELECT * FROM " + D_TABLE_NAME; 

    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.setmNumber(Integer.parseInt(cursor.getString(0))); 
      contact.setmTitle(cursor.getString(1)); 
      contact.setmContent(cursor.getString(2)); 
      contact.setmMonth(cursor.getString(3)); 
      contact.setmDate(cursor.getString(4)); 
      contact.setmDay(cursor.getString(5)); 
      contact.setmTime(cursor.getString(6)); 
      contact.setmMood(Integer.parseInt(cursor.getString(7))); 
      contact.setmWeather(Integer.parseInt(cursor.getString(8))); 
      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    } 
    // return contact list 
    Log.d("agent99", contactList.get(0).getmTitle().toString()); 

    return contactList; 
} 


public int updateContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(D_COL_2,contact.getmTitle()); 
    values.put(D_COL_3,contact.getmContent()); 
    values.put(D_COL_4,contact.getmMonth()); 
    values.put(D_COL_5,contact.getmDate()); 
    values.put(D_COL_6,contact.getmDay()); 
    values.put(D_COL_7,contact.getmTime()); 
    values.put(D_COL_8,contact.getmMood()); 
    values.put(D_COL_9,contact.getmWeather()); 

    // updating row 
    return db.update(D_TABLE_NAME, values, D_COL_1 + " = ?", 
      new String[] { String.valueOf(contact.getmNumber()) }); 
} 

// Contact information delete 
public void deleteContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(D_TABLE_NAME, D_COL_1 + " = ?", 
      new String[] { String.valueOf(contact.getmNumber()) }); 
    db.close(); 
} 

// Contact information number 
public int getContactsCount() { 
    String countQuery = "SELECT * FROM " + D_TABLE_NAME; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(countQuery, null); 
    cursor.close(); 
    // return count 
    return cursor.getCount(); 
} 
} 

回收站Adapter类的DataManager

import android.content.Context; 
import android.content.Intent; 
import android.support.v4.widget.CursorAdapter; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import com.codbking.calendar.Contact; 
import com.codbking.calendar.DBHelper; 
import com.codbking.calendar.exaple.R; 
import java.util.List; 

public class DataManager extends RecyclerView.Adapter<DataManager.RecyclerViewHolder> { 
DBHelper dbHelper; 
CursorAdapter mCursorAdapter; 

List<Contact> contacts = dbHelper.getAllContacts(); 


public static class RecyclerViewHolder extends RecyclerView.ViewHolder { 

    TextView mDate, mDay, mMonth, mTime, mTitle, mContent; 
    ImageView mMood, mWeather; 
    private Context context; 



    RecyclerViewHolder(final View itemView) { 
     super(itemView); 
     context = itemView.getContext(); 
     mDate = (TextView) itemView.findViewById(R.id.TV_entries_item_date); 
     mDay = (TextView) itemView.findViewById(R.id.TV_entries_item_day); 
     mMonth = (TextView) itemView.findViewById(R.id.TV_entries_item_header); 
     mTime = (TextView) itemView.findViewById(R.id.TV_entries_item_time); 
     mTitle = (TextView) itemView.findViewById(R.id.TV_entries_item_title); 
     mContent = (TextView) itemView.findViewById(R.id.TV_entries_item_summary); 
     mMood = (ImageView) itemView.findViewById(R.id.IV_entries_item_weather); 
     mWeather = (ImageView) itemView.findViewById(R.id.IV_entries_item_mood); 

     itemView.setClickable(true); 

     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent myIntent = new Intent(v.getContext(), MainActivity.class); 
       context.startActivity(myIntent); 
      } 
     }); 
    } 
} 

@Override 
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.entries, viewGroup, false); 
    return new RecyclerViewHolder(v); 
} 

@Override 
public void onBindViewHolder(RecyclerViewHolder viewHolder, int i) { 
    // get the single element from the main array 

    for (Contact cn : contacts) { 
     viewHolder.mDate.setText(cn.getmDate()); 
     viewHolder.mDay.setText(cn.getmDay()); 
     viewHolder.mMonth.setText(cn.getmMonth()); 
     viewHolder.mTime.setText(cn.getmTime()); 
     viewHolder.mTitle.setText(cn.getmTitle()); 
     viewHolder.mContent.setText(cn.getmContent()); 
     viewHolder.mMood.setImageResource(cn.getmMood()); 
     viewHolder.mWeather.setImageResource(cn.getmWeather()); 

    } 


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

我不知道如何使用RecyclerView与数据库。 错误发生在DataManager类(置信)
也许错误发生在onBindViewHolder()方法或getItemCount()方法。 以前我用RecyclerView没有数据库应用程序运行良好......但是当我使用的数据库,应用程序只是死,所以我肯定在此代码

+0

基本上,您将所有联系信息设置为循环中的每个位置。 Pankaj Sharma的答案是正确的代码。 – Pulak

+0

谢谢你的回答,但应用程序是死..我认为答案代码是正确的太 –

+0

你未将你dbHelper从您的呼吁 –

回答

2

onBindViewHolder()方法或getItemCount()方法与此一

 @Override 
    public void onBindViewHolder(RecyclerViewHolder viewHolder, int i) { 
    // get the single element from the main array 
     Contact cn = contact.get(i); 
     viewHolder.mDate.setText(cn.getmDate()); 
     viewHolder.mDay.setText(cn.getmDay()); 
     viewHolder.mMonth.setText(cn.getmMonth()); 
     viewHolder.mTime.setText(cn.getmTime()); 
     viewHolder.mTitle.setText(cn.getmTitle()); 
     viewHolder.mContent.setText(cn.getmContent()); 
     viewHolder.mTitle.setText(cn.getmTitle()); 
     viewHolder.mContent.setText(cn.getmContent()); 
     viewHolder.mMood.setImageResource(cn.getmMood()); 
     viewHolder.mWeather.setImageResource(cn.getmWeather()); 

     } 
更换你onBindViewHolder代码
+0

谢谢你的回答!联系cn = contacts.get(i)你的意思是这个权利?但是,应用程序是死.. –

+0

@覆盖 公众诠释getItemCount(){ 回报contacts.size(); }此代码是正确的? –

0

你在一个循环中设置的所有数据。这对回收商来说是不正确的。你可以使用下面的代码:

@Override 
public void onBindViewHolder(RecyclerViewHolder viewHolder, int i) { 
    Contact cn = contact.get(i); 
    if (cn != null){ 
    viewHolder.mDate.setText(cn.getmDate()); 
    viewHolder.mDay.setText(cn.getmDay()); 
    viewHolder.mMonth.setText(cn.getmMonth()); 
    viewHolder.mTime.setText(cn.getmTime()); 
    viewHolder.mTitle.setText(cn.getmTitle()); 
    viewHolder.mContent.setText(cn.getmContent()); 
    viewHolder.mTitle.setText(cn.getmTitle()); 
    viewHolder.mContent.setText(cn.getmContent()); 
    viewHolder.mMood.setImageResource(cn.getmMood()); 
    viewHolder.mWeather.setImageResource(cn.getmWeather()); 
    } 
    } 
+0

它更好地检查空对象,以便它不会崩溃你的应用程序。 –

+0

谢谢你的回答!但是,联系cn = contacts.get(i)你的意思是这个权利?但应用程序是死的.. –

0

几个星期前,我试图用一个光标来填充一个RecyclerView。对于RecyclerView没有像CursorAdapter的东西,你必须创建你自己的实现。

我找到了一个不错的教程,其中使用光标和CursorLoader异步填充recView。本教程使用西班牙语,但代码非常清晰,适合我的应用程序。

http://www.hermosaprogramacion.com/2016/01/recyclerview-con-cursor-en-android/