首页 > 解决方案 > 如何在 recyclerview 适配器中使用 volley 发布数据

问题描述

我正在寻找一种最简单的方法来在每次单击按钮时发布注释。我使用适配器和回收器视图。我的代码如下。

适配器

''' 公共类 CriteriaAdapter 扩展 RecyclerView.Adapter<CriteriaAdapter.RecyclerVH> {

private List<criteria_services> criteria;
LayoutInflater inflater;


public CriteriaAdapter(List<criteria_services> criteria, Context ctx) {
    this.inflater = LayoutInflater.from(ctx);
    this.criteria = criteria;


}

@NonNull
@Override
public RecyclerVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = inflater.inflate(R.layout.model_list_criteria, parent, false);
    return new RecyclerVH(v) {
    };
}


@Override
public void onBindViewHolder(@NonNull RecyclerVH holder, int position) {
  holder.criteriaName.setText(criteria.get(position).getName());
}


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

@Override
public int getItemViewType(int position){
    return position;
}


public abstract class RecyclerVH extends RecyclerView.ViewHolder implements View.OnClickListener {
    ImageView btn1, btn2, btn3, btn5, btn6;
    TextView criteriaName;
    int note = 0 ;
    String URL_post = "http://10.0.2.2:80/rankit_api/post_note.php";

    public RecyclerVH(View itemView) {
        super(itemView);


        criteriaName = itemView.findViewById(R.id.criteria_name);
        itemView.setOnClickListener(this);

        btn1 = itemView.findViewById(R.id.btn1);
        btn2 = itemView.findViewById(R.id.btn2);
        btn3 = itemView.findViewById(R.id.btn3);
        btn5 = itemView.findViewById(R.id.btn5);
        btn6 = itemView.findViewById(R.id.btn6);

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                note = +3;
                String value = String.valueOf(note);
                Toast.makeText(v.getContext(), R.string.excellent , Toast.LENGTH_SHORT).show();
                btn1.setImageResource(R.drawable.un_excellent);
                //Sender s=new Sender(CriteriaAdapter.this,URL_post,note);
                //s.execute();


            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                note = +2;
                String value = String.valueOf(note);
                Toast.makeText(v.getContext(), R.string.very_good , Toast.LENGTH_SHORT).show();
                btn2.setImageResource(R.drawable.un_very_good);

            }
        });
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                note = +1;
                String value = String.valueOf(note);
                Toast.makeText(v.getContext(), R.string.good , Toast.LENGTH_SHORT).show();
                btn3.setImageResource(R.drawable.un_good);

            }
        });
        btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                note = -1;
                String value = String.valueOf(note);
                Toast.makeText(v.getContext(), R.string.bad , Toast.LENGTH_SHORT).show();
                btn5.setImageResource(R.drawable.un_bad);

            }
        });
        btn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                note = -2;
                String value = String.valueOf(note);
                Toast.makeText(v.getContext(), R.string.very_bad , Toast.LENGTH_SHORT).show();
                btn6.setImageResource(R.drawable.un_very_bad);

            }
        });
    }

    @Override
    public void onClick(View v) {
        //
    }
}}

'''

** 活动 **

''' 公共类 Activity_criteria 扩展 AppCompatActivity {

RecyclerView rv;
List<criteria_services> criterias;
RequestQueue requestQueue;
ProgressDialog progressDialog;
private static String URL = "http://10.0.2.2:80/rankit_api/criterialist.php";
private static String URL_post = "http://10.0.2.2:80/rankit_api/post_note.php";
private Button send;
private String note;


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.fragment_criteria);
    requestQueue = Volley.newRequestQueue(Activity_criteria.this);
    progressDialog = new ProgressDialog(Activity_criteria.this);

    rv = findViewById(R.id.card_criteria_serv);
    rv.setHasFixedSize(true);
    rv.setLayoutManager(new LinearLayoutManager(this));
    criterias = new ArrayList<>();
    loadCriteria();

    send = findViewById(R.id.button_send);
    send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(view.getContext(), "Well done, thank you !", Toast.LENGTH_SHORT).show();
            //Sender s=new Sender(Activity_criteria.this,URL_post,note);
            //Postnote();
        }
    });

}

private void loadCriteria() {

    StringRequest stringRequest = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONArray array = new JSONArray(response);

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

                    criterias.add(new criteria_services(
                            criteria.getString("criteria_name")
                    ));
                }

                CriteriaAdapter adapter = new CriteriaAdapter(criterias, Activity_criteria.this);
                rv.setAdapter(adapter);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    Volley.newRequestQueue(this).add(stringRequest);

}

'''

标签: androidpostandroid-recyclerviewandroid-volleyadapter

解决方案


推荐阅读