2015-09-17 3 views
0

Я пытаюсь загрузить несколько изображений на сервер (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); 

} 
+0

В чем вопрос? помочь вам с чем? как далеко вы получили и что вы пробовали? – Epodax

+0

Мне нужен способ, чтобы функция загрузки изображения могла каждый раз вызывать его самостоятельно с новыми данными вместо использования для цикла! так что я могу обнаружить, что если одно из изображений не удалось загрузить –

+0

, используйте AsyncTask для загрузки 1 pic за один раз и возврата успеха, если она была успешно загружена, затем вызовите ее в цикле for, если (response == sucess) перейдите к другому и загрузите его через ту же AsyncTask –

ответ

0

мне удалось найти решение с помощью рекурсии!

private void uploadimages2(final int i,final int j) { 

    if(i>j) 
    { 

    } 
    else 
    { 
     if(acc.p[i]!=null) 
     { 


     // 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_Uploadfirstpartyphotoacc, 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) { 
         uploadimages2((i+1),j); 

        } 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",imgstring(acc.p[i].getPhoto())); 
       params.put("pos",Integer.toString(acc.p[i].getPosition())); 
       params.put("accidentid",acc.getAccid()); 
       params.put("cmnt",acc.p[i].getComment()); 
       params.put("thid","0"); 

       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); 
    } 
     else 
     { 
      uploadimages2(i+1,j); 
     } 
    } 


} 
Смежные вопросы