【问题标题】:How to insert data in SQLite and display it using RecyclerView如何在 SQLite 中插入数据并使用 RecyclerView 显示
【发布时间】:2016-11-10 21:23:41
【问题描述】:

我让 RecyclerView 显示来自 Mysql 的数据,现在它工作得很好,我想在点击它时制作一个收藏按钮,将此项目保存在收藏夹中并在 RecyclerView 的新活动中显示它

我认为我应该使用 Sqlite 将数据保存在其中,然后显示在最喜欢的活动中,但我不知道如何做到这一点,请帮助我

我尝试制作 Sqlite

public class DB_Sqlit extends SQLiteOpenHelper {

public static final String BDname = "mdata.db";

public DB_Sqlit(Context context) {
    super(context, BDname, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table favorite ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, img TEXT, url TEXT, num TEXT, size TEXT)");
        }

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS favorite");
    onCreate(db);

}



public Boolean Insert_to_favorite(String name, String img, String url, String num, String size) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("name", name);
    contentValues.put("img", img);
    contentValues.put("url", url);
    contentValues.put("num", num);
    contentValues.put("size", size);


    long result = db.insert("favorite", null, contentValues);

    if (result == -1)
        return false;
    else
        return true;

}


public ArrayList getAllList_Favorite() {
    ArrayList<listitem_gib> arraylist = new ArrayList<listitem_gib>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor rs = db.rawQuery("select * from favorite", null);
    rs.moveToFirst();
    while (!rs.isAfterLast()) {
        String id = rs.getString(rs.getColumnIndex("id"));
        String name = rs.getString(rs.getColumnIndex("name"));
        String img = rs.getString(rs.getColumnIndex("img"));
        String url = rs.getString(rs.getColumnIndex("url"));
        String num = rs.getString(rs.getColumnIndex("num"));
        String size = rs.getString(rs.getColumnIndex("size"));


        arraylist.add(new listitem_gib());
        rs.moveToNext();
    }
    return arraylist;
}

public int get_check_List_Favorite(String Title) {

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor rs = db.rawQuery("select * from favorite Where name like '"+ Title +"'", null);
    rs.moveToFirst();
    int count = rs.getCount();
    return count;
}


public Integer Delete(String id) {
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete("favorite", "id = ?", new String[]{id});
}}

RecyclerView 活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_r_arabic);

    GetDataAdapter1 = new ArrayList<>();

    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

    progressBar = (ProgressBar) findViewById(R.id.progress_bar);

    recyclerView.setHasFixedSize(true);

    recyclerViewlayoutManager = new LinearLayoutManager(this);

    recyclerView.setLayoutManager(recyclerViewlayoutManager);

    progress_layout = (LinearLayout) findViewById(R.id.progress_layout);
    progress_layout.setVisibility(View.VISIBLE);

    JSON_DATA_WEB_CALL();

}

public void JSON_DATA_WEB_CALL(){

    Intent intent = getIntent();
    story_type = intent.getStringExtra("story_type");


    String GET_JSON_DATA_HTTP_URL = "http://grassyhat.com/android/" + story_type + ".php";

    jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,

            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    progress_layout.setVisibility(View.GONE);

                    JSON_PARSE_DATA_AFTER_WEBCALL(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    requestQueue = Volley.newRequestQueue(this);

    requestQueue.add(jsonArrayRequest);
}

public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){

    for(int i = 0; i<array.length(); i++) {

        listitem_gib GetDataAdapter2 = new listitem_gib();

        JSONObject json = null;
        try {
            json = array.getJSONObject(i);

            GetDataAdapter2.setId(json.getString(id));

            GetDataAdapter2.setName(json.getString(name));

            GetDataAdapter2.seturl(json.getString(url));

            GetDataAdapter2.setimg(json.getString(img));

            GetDataAdapter2.setnum(json.getString(num));

            GetDataAdapter2.setsize(json.getString(size));

        } catch (JSONException e) {

            e.printStackTrace();
        }
        GetDataAdapter1.add(GetDataAdapter2);
    }

    recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, this);


    //RecyclerView needs a layout manager in order to display data so here we create one
    StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);

    //Here we set the layout manager and the adapter to the listview
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setAdapter(recyclerViewadapter);

}

RecyclerViewAdapter

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

Context context;

List<listitem_gib> getDataAdapter;

public RecyclerViewAdapter(List<listitem_gib> getDataAdapter, Context context){

    super();

    this.getDataAdapter = getDataAdapter;
    this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout, parent, false);

    ViewHolder viewHolder = new ViewHolder(v,context,getDataAdapter);

    return viewHolder;
}

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

    listitem_gib getDataAdapter1 =  getDataAdapter.get(position);

    holder.name.setText(getDataAdapter1.getName());

    holder.num.setText(getDataAdapter1.getnum());


    Picasso.with(context).load("http://grassyhat.com/android/image/" + getDataAdapter1.getimg()).into(holder.img1);


}

@Override
public int getItemCount() {

    return getDataAdapter.size();
}

class ViewHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener{


    public TextView name;
    public TextView num;
    public ImageView img1;

    Context context;
    List<listitem_gib> getDataAdapter;



    public ViewHolder(View itemView, Context context ,List<listitem_gib> getDataAdapter ) {

        super(itemView);
        itemView.setOnClickListener(this);
        this.getDataAdapter = getDataAdapter;
        this.context = context;

        name = (TextView) itemView.findViewById(R.id.Main_Text) ;
        num = (TextView) itemView.findViewById(R.id.Second_Text) ;
        img1 = (ImageView) itemView.findViewById(R.id.img1) ;


    }

    @Override
    public void onClick(View v) {

        int position = getAdapterPosition();
        listitem_gib getDataAdapter =this.getDataAdapter.get(position);
        Intent intent = new Intent(this.context,Rewaya_info.class);
        intent.putExtra("name",getDataAdapter.getName());
        intent.putExtra("url",getDataAdapter.geturl());
        intent.putExtra("img",getDataAdapter.getimg());
        intent.putExtra("num",getDataAdapter.getnum());
        intent.putExtra("size",getDataAdapter.getsize());
        this.context.startActivity(intent);

    }
}}

列表项

public class listitem_gib {

String id;
String name;
String url;
String img;
String num;
String size;


public String getName() {

    return name;
}

public void setName(String name) {

    this.name = name;
}

public String getid() {

    return id;
}

public void setId(String id1) {

    this.id = id1;
}


public String geturl() {

    return url;
}

public void seturl(String url1) {

    this.url = url1;
}

public String getimg() {

    return img;
}

public void setimg(String img1) {

    this.img = img1;
}

public String getnum() {

    return num;
}

public void setnum(String num1) {

    this.num = num1;
}
public String getsize() {

    return size;
}

public void setsize(String size1) {

    this.size = size1;
}}

【问题讨论】:

  • 这段代码有什么错误吗?顺便说一句,小心“onUpgrade”,你正在删除表,这意味着一旦你更新了数据库版本,你的所有用户都将失去他们的最爱。
  • 我不知道如何制作,我只是看了一个教程并制作了 Sqlite,但我不知道如何使用它并制作最喜欢的活动

标签: android mysql sqlite android-recyclerview


【解决方案1】:
  1. 您需要使用 SQLite 数据库离线存储收藏品数据

    • 创建一个包含所有数据字段的表,方法是让一个类扩展 SQLiteOpenHelper 并覆盖 onCreate() 以在其中编写您的创建表命令,在您的情况下,您不需要在 onUpdate() 方法中编写任何内容

    • 在您的 Detail 活动中为 fav 创建一个按钮,该按钮将实现在 SQLite 数据库中插入此项目


  2. 在 RecyclerView 中查看来自 SQLite 的数据:

    • 从您的项目类型“类”中创建一个数组列表
    • 使用游标从 SQLite 数据库中检索每个项目数据
    • 在arraylist中添加item数据,发送给RecyclerView的适配器

您可以使用本教程构建 RecyclerView :
Arabic Version

English Version

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2018-05-29
    • 2019-08-05
    相关资源
    最近更新 更多