【发布时间】:2018-02-03 07:10:20
【问题描述】:
我一直在尝试使用片段中的 recycleview 在 android 应用程序中显示我的 sqlite 数据。但是尽管 logcat 显示我正在从表中获取数据,但 cardview 没有显示任何数据。
这是我的 memberActivity,我在其中调用了 recycleview 并创建了一个适配器类 MemberActivity.java:
package com.aust.austpc.austpcbeta6.database;
import ...
public class MemberActivity extends Fragment {
RecyclerView recyclerView;
ArrayList<MemberDesc> listItems;
MemAdapter adapter = null;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.activity_member,container,false);
recyclerView=(RecyclerView) v.findViewById(R.id.member_activity);
recyclerView.setHasFixedSize(true);
listItems=new ArrayList<>();
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
DatabaseHandler databaseHandler = new DatabaseHandler(v.getContext());
SQLiteDatabase sqLiteDatabase= databaseHandler.getReadableDatabase();
Cursor cursor = databaseHandler.getAllData();
cursor.moveToFirst();
Log.i(TAG, cursor.getColumnName(0));
do{
MemberDesc memberDesc=new MemberDesc();
listItems.add(memberDesc);
Log.i(TAG, "SHOWING");
}while (cursor.moveToNext());
databaseHandler.close();
adapter=new MemAdapter(listItems);
recyclerView.setAdapter(adapter);
return v;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().setTitle("Member");
}
}
class MemAdapter extends RecyclerView.Adapter<MemAdapter.ViewHolder>
{
private ArrayList<MemberDesc> listItems;
private Context context;
public MemAdapter(ArrayList<MemberDesc> listItems) {
this.listItems = listItems;
}
@Override
public MemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext())
.inflate(R.layout.member_row,parent,false);
return new MemAdapter.ViewHolder(v);
}
@Override
public void onBindViewHolder(MemAdapter.ViewHolder holder, int position) {
MemberDesc memberDesc=listItems.get(position);
holder.textViewName.setText(memberDesc.getName());
holder.textViewRoll.setText(memberDesc.getRoll());
holder.textViewPhone.setText(memberDesc.getPhone());
holder.textViewYear.setText(memberDesc.getYear());
holder.textViewSem.setText(memberDesc.getSem());
Log.i(TAG, holder.textViewName.getText().toString());
}
@Override
public int getItemCount() {
//int i=listItems.size();
//Log.i(TAG, Integer.toString(i));
return listItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView textViewName;
public TextView textViewRoll;
public TextView textViewPhone;
public TextView textViewYear;
public TextView textViewSem;
public ViewHolder(View itemView) {
super(itemView);
textViewName=(TextView)itemView.findViewById(R.id.memName);
textViewRoll=(TextView)itemView.findViewById(R.id.memRoll);
textViewPhone=(TextView)itemView.findViewById(R.id.memPhone);
textViewYear=(TextView)itemView.findViewById(R.id.memYear);
textViewSem=(TextView)itemView.findViewById(R.id.memSem);
}
}
}
member_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/memName" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/memRoll"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/memPhone"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/memYear"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/memSem"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
MemberDesc.java:
package com.aust.austpc.austpcbeta6.database;
/**
* Created by USER on 2/3/2018.
*/
public class MemberDesc {
private String name, roll, phone, year, sem;
public MemberDesc(String name, String roll, String phone, String year, String sem) {
this.name = name;
this.roll = roll;
this.phone = phone;
this.year = year;
this.sem = sem;
}
public MemberDesc()
{
}
public String getName() {
return name;
}
public String getRoll() {
return roll;
}
public String getPhone() {
return phone;
}
public String getYear() {
return year;
}
public String getSem() {
return sem;
}
}
DatabaseHandler.java:
package com.aust.austpc.austpcbeta6.database;
import ...
/**
* Created by USER on 2/3/2018.
*/
public class DatabaseHandler extends SQLiteOpenHelper
{
public static final String Database_Name="MEMBER.db";
public static final String TABLE_NAME="MEMBER_TABLE";
public static final String KEY_ID="ID";
public static final String KEY_NAME ="NAME";
public static final String KEY_ROLL="ROLL";
public static final String KEY_CONTACT="CONTACT";
public static final String KEY_YEAR="YEAR";
public static final String KEY_SEMESTER="SEMESTER";
public DatabaseHandler(Context context) {
super(context,Database_Name,null,1);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("create table "+TABLE_NAME+"(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,ROLL TEXT,CONTACT TEXT,YEAR TEXT,SEMESTER TEXT)");
Log.i(TAG, "Datbase CREATED");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public boolean insertData(String NAME,String ROLL, String CONTACT, String YEAR, String SEMESTER)
{
SQLiteDatabase db=this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_NAME,NAME);
contentValues.put(KEY_ROLL,ROLL);
contentValues.put(KEY_CONTACT,CONTACT);
contentValues.put(KEY_YEAR,YEAR);
contentValues.put(KEY_SEMESTER,SEMESTER);
long result = db.insert(TABLE_NAME,null,contentValues);
if(result==-1)
return false;
else
return true;
}
public Cursor getAllData(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from " +TABLE_NAME, null);
return cursor;
}
}
【问题讨论】:
-
你的数据库中有数据吗?
-
我没听懂你的回答。你能详细解释一下吗。
-
那么你为什么要让你的生活变得更艰难呢?你为什么不想使用一个简单的解决方案?正如我所说,你必须重写只有两个方法,仅此而已
标签: android sqlite android-recyclerview android-sqlite