ارسال یک مقدار به سرور و دریافت براساس اون(حل شد!) ...
سلام دوستان من لیستی از دسته ها دارم که یه آیدی دارن حالا وقتی روی هر دسته کلیک می کنم ایدیش باید به سرور ارسال بشه و براساس اون آیدی عکس های اون دسته رو برمیگردونه دو روش رو امتحان کردم ولی جواب نمیده ببینید آیدی نباید به صورت یه آرایه ارسال بشه چون سرور قبول نمی کنه باید آیدی به این صورت ارسال بشه id = 2 همین من کد روی میزارم ولی خواهشا توضیح ندین چکار کنم یه تکه کد بنویسید ممنون میشم کمک کنید:
توجه کنید ایدی باید به این صورت ارسال بشه:
{"id":"2"}اشتباه
id=2صحیح
public void getWallpaperCatShow(int id , final OnWallpaperReceived onWallpaperReceived) {
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST,url,
null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
List<WallpaperItem> wallPaperItems = new ArrayList<>();
for (int i = 0; i < response.length(); i++) {
WallpaperItem wallPaperItem = new WallpaperItem();
try {
JSONObject jsonObject = response.getJSONObject(i);
wallPaperItem.setId(jsonObject.getInt("id"));
wallPaperItem.setName(jsonObject.getString("name"));
wallPaperItem.setImage(jsonObject.getString("image"));
wallPaperItems.add(wallPaperItem);
} catch (JSONException e) {
e.printStackTrace();
}
}
onWallpaperReceived.onReceived(wallPaperItems);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("TAG", "onErrorResponse: " + error);
}
});
سلام برای ارسال پارامتر به سمت سرور از طریق Volley باید از StringRequest استفاده کنید برای این کار اول از همه کلاس جدید به اسم VolleyRequestHelper ایجاد کنید کد زیر رو درونش قرار بدید
import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;
import java.util.Map;
public class VolleyRequestHelper extends StringRequest {
private Map<String, String> params;
public VolleyRequestHelper(int method, String url, Map<String, String> params,
Response.Listener<String> listener, Response.ErrorListener errorListener)
{
super(method, url, listener, errorListener);
this.params = params;
}
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
}
کد بالا به این اشاره میکنه که شما یک کلاس که از StringRequest ارث بری کرده ساختید ولی کانستراکتور اون رو که قابلیت گرفتن پارامتر دارد را شخصی سازی کردید
حالا برای استفاده از کلاس بالا کافیه در جایی که میخواهید اطلاعات را ارسال کنید از کد زیر استفاده کنید
Map<String, String> params = new HashMap<>();
params.put("id","1");
VolleyRequestHelper request = new VolleyRequestHelper
(Request.Method.POST, url, params,
new Response.Listener<String>() {
@Override public void onResponse(String result) {
},
new Response.ErrorListener() {
@Override public void onErrorResponse(VolleyError volleyError) {
} });
Volley.newRequestQueue(context).add(request);
در بالا با استفاده از params.put دیتای خود رو به شکل پارامتر قرار میدهید (اگر از json استفاده میکنید آن را به رشته تبدیل کنید و سمت سرور دوباره به json برگردانید)
public void getWallpaperCatShow(int id , final OnWallpaperReceived onWallpaperReceived) {
Map<String, String> params = new HashMap<>();
params.put("id", String.valueOf(id));
VolleyRequestHelper request = new VolleyRequestHelper(Request.Method.POST, url, params,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
List<WallpaperItem> wallPaperItems = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(response);
for (int i = 0; i < jsonArray.length(); i++) {
WallpaperItem wallPaperItem = new WallpaperItem();
JSONObject jsonObject = jsonArray.getJSONObject(i);
String image = jsonObject.getString("image");
wallPaperItem.setImage(image);
wallPaperItems.add(wallPaperItem);
}
onWallpaperReceived.onReceived(wallPaperItems);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
Volley.newRequestQueue(context).add(request);
}
public interface OnWallpaperReceived {
void onReceived(List<WallpaperItem> wallPaperItems);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .