آپلود عکس با Volley و مشخص کردن Content-Type (حل شد)
سلام
من برای آپلود عکس از آموزش این https://answers.uncox.com/android/question/13716/کتابخانه-Volley-آپلود-تصویر-و-ارسال-پارامتر-به-سرور-جدید-آموزش- استفاده کردم.
ولی مشکلاتی پیش امد که هر وقت آپلود میخوام انجام بدم این خطا در لاگ من بوجود میاد.
BasicNetwork.performRequest: Unexpected response code 500 for http://ws.acsandemo.ir/api/cp/
02-27 09:43:08.799 1592-1592/com.mosafer3766 E/VOLLEY: com.android.volley.ServerError
بعد هم که بهم گفتن Content-Type برابر با application/json قرار بدم.
خب این کارو دقیقا به چه شکل باید انجام بدم و اینکه چطور به سمت body سرور پارامترهام رو بفرستم؟
ممنون میشم جواب بدین
سلام
دوستان من تونستم تا جایی کدم رو جلو ببرم.
ابتدا باید موارد ارسالی رو به جیسون تبدیل میکردم ینی به این شکل :
String image = getStringImage(bitmap);
try {
JSONObject object = new JSONObject();
object.put("data", image);
object.put("uTypeId", 1);
object.put("id", 1);
object.put("uid", 746);
Log.e("JsonString ", object.toString());
String imageObject = object.toString();
} catch (Exception e){}
و با تغییری کدم رو به این شکل میفرستم...
{
final ProgressDialog loading = ProgressDialog.show(this,"Uploading...","Please wait...",false,false);
StringRequest stringRequest = new StringRequest(Request.Method.POST, G.uplodeUrl, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
loading.dismiss();
s.toString();
Toast.makeText(ActivityProfile.this, s.toString() + " " +"تغییر عکس پروفایل با موفقیت انجام شد", Toast.LENGTH_LONG).show();
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
loading.dismiss();
Log.e("VOLLEY", error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
return headers;
}
@Override
public byte[] getBody() throws AuthFailureError {
try {
return imageObject == null ? null : imageObject.getBytes("utf-8"); // put your json
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", imageObject, "utf-8");
return null;
}
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
ولی وقتی اجرا میکنم هیچ پیغامی رو بر نمیگردونه و برنامم به این شکل میشه :

این کدی که من زدم برای ارسال Data به قسمت body سرور درست هست یا نه؟
این کد :
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json"); ** اینجا مشخص میکنم Content-Type
return headers;
}
@Override
public byte[] getBody() throws AuthFailureError {
try {
return imageObject == null ? null : imageObject.getBytes("utf-8"); // put your json
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", imageObject, "utf-8");
return null;
}
}
سلام
کسی به خودش زحمت نداد یه راهنمایی کنه ولی بلاخره درست شد خدارو شکر
Content-Type رو اشتباه میفرستادم.
بجای اینجای کد :
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json"); ** اینجا مشخص میکنم Content-Type
return headers;
}
باید این رو مینوشتم :
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
و کد تکمیلی من :
{
final ProgressDialog loading = ProgressDialog.show(this,"Uploading...","Please wait...",false,false);
StringRequest stringRequest = new StringRequest(Request.Method.POST, G.uplodeUrl, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
loading.dismiss();
s.toString();
Toast.makeText(ActivityProfile.this, s.toString() + " : " + IdUser + " : " +"تغییر عکس پروفایل با موفقیت انجام شد", Toast.LENGTH_LONG).show();
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
loading.dismiss();
Log.e("VOLLEY", error.toString());
}
}) {
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
@Override
public byte[] getBody() throws AuthFailureError {
//String your_string_json = ""; // put your json
try {
return imageObject == null ? null : imageObject.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", imageObject, "utf-8");
return null;
}
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
بازم ممنون
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .