从SQLite的获取数据Recyclerview它领我到空

问题描述 投票:0回答:1

我试图从SQLiteDatabaseHelper获取数据,但在Fragment的数据来为空。在Fragment我检查,如果DB是0比告诉我一个LinearLayout中,如果不为空,比我展示我与ListView的尝试Recycler view和它的工作,但我决定,因为我需要做更多的功能那里RecyclerView改变。

我创造了。

1个模型视图。 2 SQLite的数据库。 3适配器。 4片段。

ModelView.class

public class ReadingList implements Parcelable {

public String Icon;
public String Url;
public String PageTitle;
protected ReadingList(Parcel in) {
}

public ReadingList() {

}

public static final Creator<ReadingList> CREATOR = new Creator<ReadingList>() {
    @Override
    public ReadingList createFromParcel(Parcel in) {
        return new ReadingList(in);
    }

    @Override
    public ReadingList[] newArray(int size) {
        return new ReadingList[size];
    }
};

public String getIcon() {
    return Icon;
}

public void setIcon(String icon) {
    Icon = icon;
}

public String getUrl() {
    return Url;
}

public void setUrl(String url) {
    Url = url;
}

public String getPageTitle() {
    return PageTitle;
}

public void setPageTitle(String pageTitle) {
    PageTitle = pageTitle;
}

public static Creator<ReadingList> getCREATOR() {
    return CREATOR;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof ReadingList)) return false;
    ReadingList that = (ReadingList) o;
    return Objects.equals(Icon, that.Icon) &&
            Objects.equals(Url, that.Url) &&
            Objects.equals(PageTitle, that.PageTitle);
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public int hashCode() {
    return Objects.hash(Icon, Url, PageTitle);
}

@Override
public String toString() {
    return "ReadingList{" +
            "Icon='" + Icon + '\'' +
            ", Url='" + Url + '\'' +
            ", PageTitle='" + PageTitle + '\'' +
            '}';
}
}

SQLiteDB.class

public class ReadingListDB extends SQLiteOpenHelper {

private static final String DBHISTORY = "readingList.db";
public static final int DBVERSION = 1;

public static final String TABLE_NAME = "readingList";
private static final String COL1 = "ID";
private static final String COL2 = "name";

public ReadingListDB(Context context) {
    super(context, DBHISTORY, null, DBVERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COL2 +" TEXT UNIQUE)";
    db.execSQL(createTable);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP IF TABLE EXISTS " + DBHISTORY);
    onCreate(db);
}
public boolean addData(String item) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL2, item);
    long result = db.insert(TABLE_NAME, null, contentValues);

    //if date as inserted incorrectly it will return -1
    if (result == -1) {
        return false;
    } else {
        return true;
    }
}
public Cursor getData(){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_NAME;
    Cursor data = db.rawQuery(query, null);
    return data;
}

public Cursor getItemID(String name){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT " + COL1 + " FROM " + TABLE_NAME +
            " WHERE " + COL2 + " = '" + name + "'";
    Cursor data = db.rawQuery(query, null);
    return data;
}

Adapter.class

public class ReadingListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context mContext;
    ArrayList<ReadingList> arrayList;
    ReadingListDB readingListDB;

    public ReadingListAdapter(Context mContext, ArrayList<ReadingList> arrayList) {
        this.arrayList = arrayList;
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public ReadingListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.reading_item, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int i) {
        final ViewHolder viewHolder = (ViewHolder) holder;
        readingListDB = new ReadingListDB(mContext);
        viewHolder.readingListTitle.setText(arrayList.get(i).getPageTitle());
        viewHolder.readingListUrl.setText(arrayList.get(i).getUrl());
    }


    @Override
    public int getItemCount() {
        return (arrayList == null) ? 0 : arrayList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView readingListUrl, readingListTitle;
        ImageView imgDel, imgFavIcon, imgMove;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            readingListUrl = itemView.findViewById(R.id.tvSiteURL);
            readingListTitle = itemView.findViewById(R.id.tvSiteTitle);
            imgDel = itemView.findViewById(R.id.ivDel);
            imgFavIcon = itemView.findViewById(R.id.ivFav);
            imgMove = itemView.findViewById(R.id.ivMove);
        }
    }
}

Fragment.class

public class ReadingListFragment extends Fragment {
View paramView;
LinearLayout linLayoutEmptyLis;
ListView recyclerView;
RecyclerView mRecyclerView;
ReadingListAdapter readingListAdapter;
ImageView showDeleteButton;
ArrayList<ReadingList> arrayList = new ArrayList<>();
public Context mContext;

ReadingListDB readingListDB;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    paramView = inflater.inflate(R.layout.fragment_reading_list, container, false);
    linLayoutEmptyLis = paramView.findViewById(R.id.linLayoutEmptyListReading);
    mRecyclerView = paramView.findViewById(R.id.lvReading);

    mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
    mRecyclerView.setHasFixedSize(true);
    ReadingList readingList = new ReadingList();
    readingListDB = new ReadingListDB(getActivity());

    readingListAdapter = new ReadingListAdapter(mContext, arrayList);
    final Cursor data = readingListDB.getData();
    while (data.moveToNext()) {
        arrayList.add(readingList);

        Log.d("TAG", "onCreateView: " + data + readingList);

    }
    if (data.getCount() != 0) {
        mRecyclerView.setVisibility(View.VISIBLE);
        linLayoutEmptyLis.setVisibility(View.GONE);
        mRecyclerView.setAdapter(readingListAdapter);

    } else {
        mRecyclerView.setVisibility(View.GONE);
        linLayoutEmptyLis.setVisibility(View.VISIBLE);
    }
    return paramView;
}

reading_item.XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:background="@drawable/selector_btn_home"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView android:id="@id/ivDel" style="@style/ImgViewDel" />
    <ImageView android:layout_gravity="top" android:id="@+id/ivFav" android:layout_width="16.0dip" android:layout_height="fill_parent" android:layout_marginLeft="6.0dip" android:layout_marginTop="6.0dip" android:scaleType="fitStart" />
    <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="10.0dip" android:layout_weight="1.0">
        <TextView android:textSize="14.0sp" android:textColor="@android:color/black" android:id="@id/tvSiteTitle" android:paddingTop="4.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:lines="2" />
        <TextView android:textSize="12.0sp" android:textColor="@color/light_gray" android:id="@id/tvSiteURL" android:paddingBottom="2.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" />
    </LinearLayout>
    <ImageView android:id="@id/ivMove" style="@style/ImgViewMove" />

</LinearLayout>

fragment_reading_list.XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:id="@id/mainContainer" style="@style/ActivityMain"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <android.support.v7.widget.RecyclerView android:visibility="gone" android:id="@+id/lvReading"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:listSelector="@android:color/transparent" android:overScrollMode="never" />
    <LinearLayout android:gravity="center" android:layout_gravity="center"
        android:orientation="vertical" android:id="@+id/linLayoutEmptyListReading" android:clickable="true"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:layout_marginLeft="20.0dip" android:layout_marginTop="-30.0dip"
        android:layout_marginRight="20.0dip">
        <ImageView android:layout_gravity="center_horizontal" android:layout_width="55.0dip"
            android:layout_height="55.0dip" android:src="@drawable/ic_bookmarks_big"
            android:scaleType="fitCenter" />
        <TextView android:textSize="18.0sp" android:textColor="@color/light_gray_alpha"
            android:layout_gravity="center" android:paddingTop="5.0dip" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:text="@string/BEReadingListModeSegmentControlTitle" />
        <TextView android:textSize="12.0sp" android:textStyle="bold" android:textColor="@color/gray"
            android:gravity="center" android:layout_gravity="center" android:paddingTop="10.0dip"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="@string/BEReadingListAddInfo" />
        <TextView android:textSize="12.0sp" android:textColor="@color/gray"
            android:gravity="center" android:layout_gravity="center" android:id="@+id/tvHelp"
            android:paddingTop="10.0dip" android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>
java android android-fragments android-recyclerview
1个回答
1
投票

在你fragment.class,添加这些行。你需要从游标中读取数据。

final Cursor data = readingListDB.getData();
    while (data.moveToNext()) {
        ReadingList list = new ReadingList();
        // add proper column name.
        String pageTitle = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME));
        String pageUrl = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME));
        // I am assuming the method name here, add your own method names.
        list.setPageTitle(pageTitle);
        list.setPageUrl(pageUrl);
        arrayList.add(list);

        Log.d("TAG", "onCreateView: " + data + list);

    }
© www.soinside.com 2019 - 2024. All rights reserved.