基于Android平台开发,在线电影购票系统(九)用户评论列表实现

1. 涉及到的技术点

  1. 使用SQLite数据库实现用户评论数据保存
  2. 使用RecyclerView+adapter实现用户评论列表

2. 具体代码实现过程

  1. CommentListAdapter.java适配器
public class CommentListAdapter extends RecyclerView.Adapter<CommentListAdapter.MyHolder> {
    private List<CommentInfo> mCommentInfoList = new ArrayList<>();


    public void setCommentInfoList(List<CommentInfo> commentInfoList) {
        mCommentInfoList = commentInfoList;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.comments_list_item, parent, false);
        return new MyHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyHolder holder, int position) {

        CommentInfo commentInfo = mCommentInfoList.get(position);
        holder.tv_username.setText(commentInfo.getUsername());
        holder.tv_content.setText(commentInfo.getComment());
        holder.tv_time.setText(commentInfo.getComment_create_time());
        holder.rb_star.setRating(commentInfo.getRating());

    }

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

    static class MyHolder extends RecyclerView.ViewHolder {
        TextView tv_username;
        TextView tv_content;
        TextView tv_time;
        RatingBar rb_star;

        public MyHolder(@NonNull View itemView) {
            super(itemView);
            tv_username = itemView.findViewById(R.id.tv_username);
            tv_content = itemView.findViewById(R.id.tv_content);
            tv_time = itemView.findViewById(R.id.tv_time);
            rb_star = itemView.findViewById(R.id.rb_star);
        }
    }
}
  1. CommentDbHelper.java 数据库建表
public class CommentDbHelper extends SQLiteOpenHelper {
    private static CommentDbHelper sHelper;
    private static final String DB_NAME = "comment.db";
    private static final int VERSION = 1;

    public CommentDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //创建单例,供使用调用该类里面的的增删改查的方法
    public synchronized static CommentDbHelper getInstance(Context context) {
        if (null == sHelper) {
            sHelper = new CommentDbHelper(context, DB_NAME, null, VERSION);
        }
        return sHelper;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建order_table表
        db.execSQL("create table comment_table(comment_id integer primary key autoincrement, " +
                "movie_name text," +       //用户名
                "username text," +
                "comment text," +
                "comment_create_time text," +
                "rating float" +
                ")");


    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    /**
     * 评论
     */
    public int insertComment(CommentInfo commentInfo) {
        //获取SQLiteDatabase实例
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        //填充占位符
        values.put("movie_name", commentInfo.getMovie_name());
        values.put("username", commentInfo.getUsername());
        values.put("comment", commentInfo.getComment());
        values.put("comment_create_time", getCurrentTime());
        values.put("rating", commentInfo.getRating());
        String nullColumnHack = "values(null,?,?,?,?,?)";
        //执行
        int insert = (int) db.insert("comment_table", nullColumnHack, values);
//        db.close();
        return insert;
    }

    /**
     * 删除自己的评论
     */
    public void deleteComment(int comment_id) {
        SQLiteDatabase db = getWritableDatabase();
        db.delete("comment_table", "comment_id=?", new String[]{String.valueOf(comment_id)});
        db.close();
    }

    /**
     * 根据电影名查询评论
     */
    @SuppressLint("Range")
    public List<CommentInfo> queryCommentByMovieName(String movie_name) {
        List<CommentInfo> orderList = new ArrayList<>();
        SQLiteDatabase db = getWritableDatabase();
        Cursor cursor = db.query("comment_table", null, "movie_name=?", new String[]{movie_name}, null, null, "comment_id desc");
        while (cursor.moveToNext()) {
            int comment_id = cursor.getInt(cursor.getColumnIndex("comment_id"));
            String movieName = cursor.getString(cursor.getColumnIndex("movie_name"));
            String username = cursor.getString(cursor.getColumnIndex("username"));
            String comment = cursor.getString(cursor.getColumnIndex("comment"));
            String comment_create_time = cursor.getString(cursor.getColumnIndex("comment_create_time"));
            float rating = cursor.getFloat(cursor.getColumnIndex("rating"));
            orderList.add(new CommentInfo(comment_id, movieName, username, comment, comment_create_time, rating));
        }
        return orderList;
    }


    /**
     * 获取当前系统时间
     */

    private String getCurrentTime() {
        // 获取当前时间
        Date currentDate = new Date();
        // 创建一个日期格式化对象
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 将当前时间格式化为指定格式的字符串
        String formattedDate = dateFormat.format(currentDate);
        return formattedDate;
    }

}
  1. CommentInfo.java 评论数据实体
public class CommentInfo {
    private int comment_id;
    private String movie_name;
    private String username;
    private String comment;
    private String comment_create_time;
    private float rating;


    public CommentInfo() {
    }

    public CommentInfo(int comment_id, String movie_name, String username, String comment, String comment_create_time, float rating) {
        this.comment_id = comment_id;
        this.movie_name = movie_name;
        this.username = username;
        this.comment = comment;
        this.comment_create_time = comment_create_time;
        this.rating = rating;
    }

    public int getComment_id() {
        return comment_id;
    }

    public void setComment_id(int comment_id) {
        this.comment_id = comment_id;
    }


    public String getMovie_name() {
        return movie_name;
    }

    public void setMovie_name(String movie_name) {
        this.movie_name = movie_name;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public String getComment_create_time() {
        return comment_create_time;
    }

    public void setComment_create_time(String comment_create_time) {
        this.comment_create_time = comment_create_time;
    }

    public float getRating() {
        return rating;
    }

    public void setRating(float rating) {
        this.rating = rating;
    }
}
  1. comments_list_item.xml recyclerView所对应的item布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:orientation="vertical">

        <androidx.appcompat.widget.LinearLayoutCompat
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_vertical">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/img_avatar" />

            <TextView
                android:id="@+id/tv_username"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="乖,摸摸头"
                android:textColor="#333333"
                android:textStyle="bold" />
        </androidx.appcompat.widget.LinearLayoutCompat>


        <RatingBar
            android:id="@+id/rb_star"
            style="?android:attr/ratingBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:isIndicator="true"
            android:numStars="5"
            android:stepSize="0.5" />

        <TextView
            android:id="@+id/tv_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:lineSpacingExtra="6dp"
            android:text="三星半 隔这么久人能凑这么齐挺不容易的"
            android:textColor="#494949"
            android:textSize="12sp" />


        <TextView
            android:id="@+id/tv_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="2024-07-16 12:44:12"
            android:textColor="#aaaaaa"
            android:textSize="12sp" />


        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginTop="10dp"
            android:background="#f5f5f5" />
    </androidx.appcompat.widget.LinearLayoutCompat>


</androidx.appcompat.widget.LinearLayoutCompat>

3. 最终效果图

在这里插入图片描述

4. 资料学习

1. 数据存储与访问之——初见SQLite数据库: http://it028.com/android-tutorial-sqlite-intro-3.html

2. 数据存储与访问之——又见SQLite数据库:http://it028.com/android-tutorial-sqlite-2-4.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩宇软件开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值