Мне нужно реализовать рейтинг студентов, используя Android Библиотека залпа. Я получил GET имя студента, используя запрос GET с Volley. Мне нужно ПОСТАВИТЬ значение рейтинга с помощью API рейтинга. API требует использования Body и form-data как в POSTMAN с Key-value как (rate [], client_id). Я написал реализацию Volley для Rating API, но она выдает следующую ошибку «E / Volley: [99703] BasicNetwork.performRequest: Неожиданный код ответа 403 для http://api-eriqab.cocalms.com/api/v1/storeClient/20» и «E / VOLLEY: null». Как реализовать и устранить эту ошибку.
Требование API
Метод API
private void Rating() {
String URL = RestAPI.Rate + ratingList.getId();
StringRequest request = new StringRequest(Request.Method.POST, URL, detailRatingListener, errorRatingListener) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("rate[]", String.valueOf(ratingList.getUrate()));
params.put("client_id[]", String.valueOf(ratingList.getuClient_id()));
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Accept", "application/vnd.MAIS_ERIQAB.v1+json");
params.put("Authorization", "Bearer " + storeToken);
return params;
}
};
VolleySingleton.getInstance(this).addToRequestQueue(request);
}
public Response.Listener<String> detailRatingListener = response ->
{
Log.i("VOLLEY", "response" + response);
try {
JSONObject responseObj = new JSONObject(response);
JSONArray array = responseObj.optJSONArray("data");
JSONArray msg = responseObj.optJSONArray("message");
if(msg.equals("success")) {
Toast.makeText(getApplicationContext(), "Successfully Submitted ", Toast.LENGTH_LONG).show();
Intent intent = new Intent(StudentRating.this, ClassDetails.class);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "Failed to Submit", Toast.LENGTH_LONG).show();
}[![enter image description here][1]][1]
} catch (JSONException e) {
e.printStackTrace();
}
};
Response.ErrorListener errorRatingListener = error -> {
Log.e("VOLLEY", "" + error.getMessage());
};
Код адаптера
public class StudentRatingAdapter extends RecyclerView.Adapter<StudentRatingAdapter.RatingViewHolder> {
private Context context;
private List<StudentRatingModel> ratingList;
private StudentRatingModel list;
public StudentRatingAdapter(Context context, List<StudentRatingModel>ratingList) {
this.context = context;
this.ratingList = ratingList;
}
@NonNull
@Override
public RatingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.pembelajaran_kehadiran_card, parent, false);
return new RatingViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull StudentRatingAdapter.RatingViewHolder holder, int position) {
list = ratingList.get(position);
holder.textView.setText(list.getName());
holder.ratingBarStudent.setRating(list.getRating());
}
@Override
public int getItemCount() {
return ratingList == null ? 0 : ratingList.size();
}
public class RatingViewHolder extends RecyclerView.ViewHolder {
TextView textView;
RatingBar ratingBarStudent;
Switch ratingSwitchStudent;
public RatingViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.studentNameRating);
ratingBarStudent = itemView.findViewById(R.id.ratingStudent);
ratingSwitchStudent = itemView.findViewById(R.id.switchBtnStudent);
ratingBarStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int var = (int) ratingBarStudent.getRating();
list.setUrate(var);
list.setuClient_id(list.getId());
}
});
}
}
}
Вызов метода
selasaiBtn = (Button) findViewById(R.id.selasai);
selasaiBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Rating();
}
});