首页 > 解决方案 > 从回收站视图中获取多个选定的数据并将数据存储到数据库

问题描述

我有一个显示来自 json api 的数据的回收站视图。我将其设为多项选择,因此用户可以从列表中选择超过 1 个数据。当用户单击按钮时,我想使用 volley 将所选数据存储到我的数据库表的不同列中。

我已经做到了,但是存储在数据库中的数据是相同的,我的意思是每一列都存储了相同的数据。我想让每一列得到不同的数据。

例如:用户选择 3 个数据,例如 data1、data2 和 data3。当用户点击按钮时,存储在 db 上的数据是:

第 1 栏 | 第 2 栏 | 第 3 栏

数据1 | 数据1 | 数据1

数据2 | 数据2 | 数据2

数据3 | 数据3 | 数据3

我想要实现的是当用户点击按钮存储数据时,列将:

第 1 列 | 第 2 列 | 第 3 列

数据1 | 数据2 | 数据3

有人有解决方案吗?

在我的代码下方:

活动.java

public class AddTagActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private ArrayList<TagItem> tagItemArrayList = new ArrayList<>();
private TagAdapter adapter;
private Button save;
private String url = "http://agenproduk.dianarthaselaras.com/user/tag";

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

    save = findViewById(R.id.save);
    recyclerView = findViewById(R.id.tag_rview);

    int numberOfColumns = 2;
    //recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
    recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
    adapter = new TagAdapter(this, tagItemArrayList);
    recyclerView.setAdapter(adapter);

    getData();

    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (adapter.getSelected().size() > 0) {
                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < adapter.getSelected().size(); i++) {
                    stringBuilder.append(adapter.getSelected().get(i).getTagList());
                    stringBuilder.append("\n");

                }
                //showToast(stringBuilder.toString().trim());
                postTag(stringBuilder.toString().trim(), stringBuilder1.toString().trim(), stringBuilder2.toString().trim());
            } else {
                //showToast("No Selection");
            }
        }
    });
}

private void getData(){
    final ProgressDialog progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Loading...");
    progressDialog.show();

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    String URL_READ = url;
    System.out.print(URL_READ);
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, URL_READ,null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    progressDialog.dismiss();
                    System.out.println(response);
                    try{
                        JSONArray jsonArray = response.getJSONArray("tag");
                        Gson gson = new Gson();
                        tagItemArrayList.clear();
                        for (int k = 0; k < jsonArray.length(); k++) {

                            JSONObject jsonObject = jsonArray.getJSONObject(k);
                            TagItem data = gson.fromJson(String.valueOf(jsonObject), TagItem.class);
                            tagItemArrayList.add(data);

                        }
                        adapter.notifyDataSetChanged();
                        recyclerView.setAdapter(adapter);

                        progressDialog.dismiss();

                    } catch (JSONException e) {
                        e.printStackTrace();
                        progressDialog.dismiss();
                        Toast.makeText(AddTagActivity.this, "Error "+e.toString(), LENGTH_SHORT).show();
                    }
                }

            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    progressDialog.dismiss();
                    Toast.makeText(AddTagActivity.this, "Error "+error.toString(), LENGTH_SHORT).show();
                }
            })
    {

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Accept", "application/json");
            return params;
        }
    };
    requestQueue.add(jsonObjectRequest);
}

private void showToast(String msg) {
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}

private void postTag(final String tag1, final String tag2, final String tag3){

    Intent intent = getIntent();
    final String idd = intent.getStringExtra("id");
    final String name = intent.getStringExtra("nama");

    String URL_REGISTER = "http://agenproduk.dianarthaselaras.com/user/addtag";
    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_REGISTER,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try{
                        JSONObject jsonObject = new JSONObject(response);
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            }

                        }, 3000);


                    } catch (JSONException e){
                        e.printStackTrace();
                        Toast.makeText(AddTagActivity.this, "Failed" + e.toString(), Toast.LENGTH_SHORT).show();

                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(AddTagActivity.this, "Failed" + error.toString(), Toast.LENGTH_SHORT).show();
                }
            })

    {

        @Override
        public String getBodyContentType() {
            return "application/x-www-form-urlencoded; charset=UTF-8";
        }

        @Override
        public Map<String, String> getParams() {
            Map<String, String> params = new HashMap<>();
            params.put("userid", idd);
            params.put("user_name", name);
            params.put("tag1", tag1);
            params.put("tag2", tag2);
            params.put("tag3", tag3);
            params.put("Content-Type","application/x-www-form-urlencoded");
            return params;
        }
    };

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);

}

适配器.java

public class TagAdapter extends RecyclerView.Adapter<TagAdapter.TagViewHolder> {

private Context context;
private ArrayList<TagItem> tag;

public TagAdapter(Context context, ArrayList<TagItem> tag) {
    this.context = context;
    this.tag = tag;
}

public void setTag(ArrayList<TagItem> tag) {
    this.tag = new ArrayList<>();
    this.tag = tag;
    notifyDataSetChanged();
}

@NonNull
@Override
public TagViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_tag, viewGroup, false);
    return new TagViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull TagViewHolder tagViewHolder, int position) {
    tagViewHolder.bind(tag.get(position));
}

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

class TagViewHolder extends RecyclerView.ViewHolder {

    private TextView textView;
    private ImageView imageView;

    TagViewHolder(@NonNull View itemView) {
        super(itemView);
        textView = itemView.findViewById(R.id.textView);
        imageView = itemView.findViewById(R.id.imageView);
    }

    void bind(final TagItem tag) {
        imageView.setVisibility(tag.isChecked() ? View.VISIBLE : View.GONE);
        textView.setText(tag.getTagList());

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tag.setChecked(!tag.isChecked());
                imageView.setVisibility(tag.isChecked() ? View.VISIBLE : View.GONE);
            }
        });
    }
}

public ArrayList<TagItem> getAll() {
    return tag;
}

public ArrayList<TagItem> getSelected() {
    ArrayList<TagItem> selected = new ArrayList<>();
    for (int i = 0; i < tag.size(); i++) {
        if (tag.get(i).isChecked()) {
            selected.add(tag.get(i));
        }
    }
    return selected;
}

标签: androidjsonandroid-recyclerviewandroid-volley

解决方案


如果选择了超过 3 个项目,我不知道您要发布哪些项目

if (adapter.getSelected().size() == 1) {
        postTag(adapter.getSelected().get(0).getTagList(), null, null);
    } else if (adapter.getSelected().size() == 2) {
        postTag(adapter.getSelected().get(0).getTagList(),
                adapter.getSelected().get(1).getTagList(),
                null);
    } else if (adapter.getSelected().size() > 2) {
        postTag(adapter.getSelected().get(0).getTagList(),
                adapter.getSelected().get(1).getTagList(),
                adapter.getSelected().get(2).getTagList());
    }

推荐阅读