我想通过以下方法将数组提交到我的服务器。我的数组还包含字符串格式的图像(以字符串格式编码)。没有图像字符串它适合我。但是当我添加字符串编码图像时,会出现以下错误:
- E / Volley:[4084] BasicNetwork.performRequest:http://www.......com/TrueCaller/submit_contacts.php的意外响应代码413 05-21 14:37:38.643 18773-18773 / satsuma.callerid_realcaller W / System.err:com.android.volley.ClientError 05-21 14:37:38.644 18773-18773 / satsuma.callerid_realcaller W / System.err:at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:190) 05-21 14:37:38.644 18773-18773 / satsuma.callerid_realcaller W / System.err:at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120) 05-21 14:37:38.644 18773-18773 / satsuma.callerid_realcaller W / System.err:at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)*
private void submitContacts(){
// now here we convert this list array into json string
Gson gson=new Gson();
final String newDataArray=gson.toJson(dataArray); // dataarray is list aaray
final String server_url="http://www.........com/TrueCaller/submit_contacts.php"; // url of server check this 100 times it must be working
// volley
StringRequest stringRequest=new StringRequest(Request.Method.POST, server_url,
new Response.Listener<String>() {
@Override
public void onResponse(String response)
{
final String result=response.toString();
Log.d("response", "result : "+result); //when response come i will log it
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error)
{
error.printStackTrace();
error.getMessage(); // when error come i will log it
}
}
)
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> param=new HashMap<String, String>();
param.put("array",newDataArray); // array is key which we will use on server side
return param;
}
};
Vconnection.getnInstance(this).addRequestQue(stringRequest); // vConnection i claas which used to connect volley
}
数组初始化:
if (phoneC != "") {
Bitmap bitmap = retrieveContactPhoto(MainActivity.this, phoneC);
String image = "";
if (bitmap != null) {
image = getStringImage(bitmap);
}
Contact_Details dt = new Contact_Details(name, phoneC, UIDD, country_code, image, emailC, adressC);
dataArray.add(dt);
}
Contact_Details类如下:
public class Contact_Details {
String name;
String phone_no;
String identifier;
String country_code;
public String getCountry_code() {
return country_code;
}
public void setCountry_code(String country_code) {
this.country_code = country_code;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
String image;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
String email;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
String address;
public Contact_Details(String name, String phone_no, String identifier, String country_code, String image, String email, String address) {
this.name = name;
this.phone_no = phone_no;
this.identifier = identifier;
this.country_code = country_code;
this.image = image;
this.email = email;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone_no() {
return phone_no;
}
public void setPhone_no(String phone_no) {
this.phone_no = phone_no;
}
public String getIdentifier() {
return identifier;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
}
答案 0 :(得分:0)
是否绝对有必要将Contact_Details
数组发送到服务器?是否有一个解决方案只发送Contact_Details
的一个对象?
413
错误为Payload Too Large
。有关该错误的更多信息here
请同时验证 Basemap图像到 Base64字符串转换是否有效。
您可以使用以下类来执行此操作:
public class ImageUtil {
public static Bitmap convert(String base64Str) throws IllegalArgumentException {
byte[] decodedBytes = Base64.decode(
base64Str.substring(base64Str.indexOf(",") + 1),
Base64.DEFAULT
);
return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}
public static String convert(Bitmap bitmap) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
return Base64.encodeToString(outputStream.toByteArray(), Base64.DEFAULT);
}
}
除此之外,您可以检查服务器端以查看数据库是否支持Base64长度的字符串。
答案 1 :(得分:0)
以下代码用于将数组上传到服务器:
private void submitContacts() {
// now here we convert this list array into json string
Gson gson = new Gson();
final String newDataArray = gson.toJson(dataArray); // dataarray is list aaray
final String server_url = "http://www.vvvv.com/Caller/submit_contacts.php"; // url of server check this 100 times it must be working
// volley
StringRequest stringRequest = new StringRequest(Request.Method.POST, server_url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
final String result = response.toString();
Log.d("response", "result : " + result); //when response come i will log it
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
error.getMessage(); // when error come i will log it
}
}
) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> param = new HashMap<String, String>();
param.put("array", newDataArray); // array is key which we will use on server side
return param;
}
};
Vconnection.getnInstance(this).addRequestQue(stringRequest); // vConnection i claas which used to connect volley
}
Vconnection类的代码如下:
public class Vconnection {
private static Vconnection nInstance;
private RequestQueue RQ;
private Context CTX;
private Vconnection(Context context)
{
CTX=context;
RQ=getRequestQue();
}
public RequestQueue getRequestQue()
{
if(RQ==null)
{
RQ= Volley.newRequestQueue(CTX.getApplicationContext());
}
return RQ;
}
public static synchronized Vconnection getnInstance(Context context)
{
if(nInstance==null)
{
nInstance=new Vconnection(context);
}
return nInstance;
}
public <T> void addRequestQue(Request<T> request)
{
int socketTimeout = 30000;
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
request.setRetryPolicy(policy);
RQ.add(request);
}
}