آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ارسال یک مقدار به سرور و دریافت براساس اون(حل شد!) ...

Shadow  9 سال پیش  9 سال پیش
0 0

سلام دوستان من لیستی از دسته ها دارم که یه آیدی دارن حالا وقتی روی هر دسته کلیک می کنم ایدیش باید به سرور ارسال بشه و براساس اون آیدی عکس های اون دسته رو برمیگردونه دو روش رو امتحان کردم ولی جواب نمیده ببینید آیدی نباید به صورت یه آرایه ارسال بشه چون سرور قبول نمی کنه باید آیدی به این صورت ارسال بشه 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);

}
});
0 0
میشه بپرسم چرا حتما باید id به این صورت ارسال بشه؟ (9 سال پیش)
0 0
چون وب سرویس به این صورت مقدار رو می گیره. (9 سال پیش)
+1 0
شما به این شکل نمیتونین از وولی نتیجه بگیرین. برای ارسال پارامتر باید استرینگ ریکوست ارسال کنین و تهش بهش پارام بدین البته من نمیفهمم که نحوه ارسال چرا باید این شکلی باشه عوضش کنین اگرم نمیشه که دیگه با همین مدل بفرستین ولی با استرینگ ریکوست (9 سال پیش)
0 0
خب من احتمال میدم شما با پارس کردن جیسون سمت سرور مشکل داشته باشید که این کارو می‌کنید. اگر مشکلتون این هست تا واستون توضیح بدم. برای ساختن جیسون سمت اندروید هم که خیلی کار ساده ایه. این کاری که شما می‌خواین بکنین اصلا اصولی و منطقی نیست (9 سال پیش)
0 0
میشه یک نمونه از این String Request رو شرح بدین یا لینکی معرفی کنید ممنون میشم و این که با این شیوه مشکلم حل میشه ؟ (9 سال پیش)
 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
علیرضا کامکار  9 سال پیش
+1 0

سلام برای ارسال پارامتر به سمت سرور از طریق 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 برگردانید)

0 0
ممنون دوست عزیز کد شما درست کار می کنه ولی چطور مقادیر داخل response رو بیرون بکشم؟ (9 سال پیش)
0 0
ممنون دوست عزیز که کمک کردین مشکلم حل شد و به درستی کار میکنه منم بقیه کدها رو می زارم شاید یه بنده خدای دیگه ای به این مشکل برخورد کرد. (9 سال پیش)
پاسخ به سوال 
Shadow  9 سال پیش
0 0

 پاسخ صحیح
 
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);

}

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .