Я пытаюсь загрузить несколько изображений на сервер (back back) PHP с телефона Android, я пытаюсь сделать так, чтобы я хотел, чтобы моя функция вызывала его сам, когда он возвращает успех на ответе, но с разными данными, поэтому я хочу перейти к следующему объекту в моем списке массивов, если первый объект был успешно загружен. В настоящее время я вызываю функцию, использующую цикл for, который одновременно загружает несколько изображений, которые будут потреблять много соединений на 3g, поэтому я предпочитаю загружать их один за другим и повторять попытку, если я потерял соединение или не смог загрузить. пожалуйста, любой, кто помог бы мне, что я был бы благодаренЗагрузка данных на сервер с использованием JSON
, что мой код
private void uploaddata() {
// Tag used to cancel the request
String tag_string_req = "req_register";
pDialog.setMessage("uploading to server ...");
showDialog();
StringRequest strReq = new StringRequest(Request.Method.POST,
AppConfig.URL_Uploadfirstparty, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Register Response: " + response.toString());
hideDialog();
try {
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");
if (!error) {
String accidentid="";
if(acc.getAccid()==null)
{
accidentid = jObj.getString("recordid");
Toast.makeText(getApplicationContext(),
"accident"+accidentid, Toast.LENGTH_LONG).show();
}
else
{
accidentid = acc.getAccid();
}
String thid="0";
for(int i=0;i<10;i++)
{
if(acc.p[i]!=null)
{
uploadimages(imgstring(acc.p[i].getPhoto()),acc.p[i].getPosition(),Integer.parseInt(accidentid),acc.p[i].getComment(),thid);
}
}
} else {
// Error occurred in registration. Get the error
// message
String errorMsg = jObj.getString("error_msg");
Toast.makeText(getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Registration Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
hideDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting params to register url
Map<String, String> params = new HashMap<String, String>();
params.put("carid", Integer.toString(acc.getCarid()));
params.put("expertid",Integer.toString(acc.getExpertid()));
params.put("longtitude",Double.toString(acc.getLongtitude()));
params.put("latitude",Double.toString(acc.getLatitude()));
params.put("injuries",Integer.toString(acc.getInjuries()));
params.put("location",acc.getLocation());
params.put("time",acc.getTime());
params.put("accid",acc.getAccid());
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
strReq.setRetryPolicy(new DefaultRetryPolicy(
30000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
private void uploadimage(final String image,final String thid,final int pos,final int id) {
// Tag used to cancel the request
String tag_string_req = "req_register";
pDialog.setMessage("uploading images to server ...");
showDialog();
StringRequest strReq = new StringRequest(Request.Method.POST,
AppConfig.URL_Uploadfirstpartyphoto, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Register Response: " + response.toString());
hideDialog();
try {
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");
if (!error) {
String noerror = jObj.getString("noerror");
Toast.makeText(getApplicationContext(),
noerror, Toast.LENGTH_LONG).show();
} else {
// Error occurred in registration. Get the error
// message
String errorMsg = jObj.getString("error_msg");
Toast.makeText(getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Registration Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
hideDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting params to register url
Map<String, String> params = new HashMap<String, String>();
params.put("image",image);
params.put("pos",Integer.toString(pos));
params.put("thid",thid);
params.put("accidentid",Integer.toString(id));
return params;
}
};
strReq.setRetryPolicy(new DefaultRetryPolicy(
30000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}
В чем вопрос? помочь вам с чем? как далеко вы получили и что вы пробовали? – Epodax
Мне нужен способ, чтобы функция загрузки изображения могла каждый раз вызывать его самостоятельно с новыми данными вместо использования для цикла! так что я могу обнаружить, что если одно из изображений не удалось загрузить –
, используйте AsyncTask для загрузки 1 pic за один раз и возврата успеха, если она была успешно загружена, затем вызовите ее в цикле for, если (response == sucess) перейдите к другому и загрузите его через ту же AsyncTask –