Загрузка изображения с Android на сервер Apache с помощью AsyncTask работает не на всех устройствах Android - PullRequest
0 голосов
/ 05 ноября 2018

Здравствуйте, сообщество переполнения стека.

Я - моя последняя надежда:

У нас разрабатывается приложение для Android ...

Пользователям предоставляется возможность загрузить изображение с камеры или локально из галереи.

В обоих случаях мы видим, что предварительный просмотр изображения / миниатюра корректно отображаются в приложении после того, как пользователь выберет изображение (или сделает снимок с камеры).

Другими словами, я считаю, что мы можем подтвердить, что изображение получено / выбрано / установлено успешно.

Как только пользователь выбирает изображение файла, отображается индикатор выполнения «Загрузка ...»:

enter image description here

Для файлов изображений размером менее ~ 250 КБ это работает !!

Однако ... вот та странная часть:

Для файлов изображений, размер которых превышает ~ 250 Кб, индикатор выполнения зависает / зависает, а затем (в конечном итоге - через несколько минут) возвращается при неудачной загрузке.

Это не проблема на стороне сервера (я полагаю), потому что:

  • Это работает на 100% на некоторых устройствах Android;
  • Это работает на 100% на других устройствах iOS;

Это не проблема версии Android, как таковая:

  • Работает на планшете Asus с Android 7.0;
  • Не работает на мобильном телефоне MGT Android 7.0;

... т.е. два устройства - каждое использует Android 7.0 - одно работает - одно нет.

ПРИМЕЧАНИЯ СЕТИ:

  • Мы видим, что во время, когда файл не удается загрузить, мы не видим успешного подключения к серверу.

РАБОТА МАЛОГО ФАЙЛА !!!

  • Опять же, даже на устройствах, где существует эта проблема ... небольшие файлы "работают" - т.е. файлы размером менее 250 КБ будут успешно загружены, в то время как файлы размером более 1 МБ просто не смогут даже подключиться к серверу .

Так странно.

КОД:

private class KYCAppLogoAPIAsyncTask extends AsyncTask<Void, Integer, String> {
        private int imageSequence = imageNo;
        HttpClient httpClient = new DefaultHttpClient();
        private Context context;
        private Exception exception;
        private ProgressDialog progressDialog;

        private KYCAppLogoAPIAsyncTask(Context context) {
            this.context = context;
        }

        @Override
        protected String doInBackground(Void... params) {

            String whitelabel_app_name = "";// always empty  // getUserData("whitelabel_app_name");
            if (!whitelabel_app_name.isEmpty()) {
                SITE_TITLE = whitelabel_app_name;
                return "LoadWebView";
            }
            try {
                return KYCAppLogoAPICall();
            } catch (Exception ex) {
                return jsonMessage("An error occurred! Please try again later.");
            }
        }

        private String KYCAppLogoAPICall(){
            HttpResponse httpResponse = null;
            HttpEntity httpEntity = null;
            String responseString = null;

            String SERVER_PATH  = "http://" + API_DOMAIN + "/link_gateway/get_member_emailaddress.gate";
            SERVER_PATH = "http://" + API_DOMAIN + "/link_gateway/intelitruth_test_POST.gate";
            Log.d("url", SERVER_PATH);

            try {
                HttpPost httpPost = new HttpPost(SERVER_PATH);
                MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();

                // Extra parameters if you want to pass to server
                multipartEntityBuilder.addPart("whitelabel_business_account_hash", new StringBody(whitelabel_business_account_hash, ContentType.TEXT_PLAIN));
                multipartEntityBuilder.addPart("member_hash", new StringBody(getUserData("member_hash"), ContentType.TEXT_PLAIN));
                multipartEntityBuilder.addPart("account_hash", new StringBody(getUserHash(), ContentType.TEXT_PLAIN));
                multipartEntityBuilder.addPart("PAYYAP_version", new StringBody(getUserData("versionName"), ContentType.TEXT_PLAIN));
                multipartEntityBuilder.addPart("PAYYAP_device_type", new StringBody(getUserData("deviceType"), ContentType.TEXT_PLAIN));

                httpResponse = httpClient.execute(httpPost);
                httpEntity = httpResponse.getEntity();

                int statusCode = httpResponse.getStatusLine().getStatusCode();
                if (statusCode == 200) {
                    // Server response
                    responseString = EntityUtils.toString(httpEntity);
                } else {
                    responseString = "Error occurred! Http Status Code: "
                            + statusCode;
                }
            }
//            catch (UnsupportedEncodingException | ClientProtocolException e) {
//                e.printStackTrace();
//                Log.e("UPLOAD_ERROR", e.getMessage());
//                this.exception = e;
//                String android_patch_redirect_url = getUserData("android_patch_redirect_url");
//                if(!android_patch_redirect_url.isEmpty()){
//                    openWebPage(android_patch_redirect_url);
//                }
//            }
            catch (IOException e) {
                e.printStackTrace();
                String android_patch_redirect_url = getUserData("android_patch_redirect_url");
                if(!android_patch_redirect_url.isEmpty()){
                    openWebPage(android_patch_redirect_url);
                }
            }

            return responseString;
        }

        @Override
        protected void onPreExecute() {


        }

        @Override
        protected void onPostExecute(String jsonStr) {

            Log.d("TAG", "Response from server: " + jsonStr);
            showAlert(jsonStr);

            if (jsonStr != null) {
                if (jsonStr.equals("LoadWebView")) {
                    loadWebview();
                } else {
                    try {
                        JSONObject jsonObj = new JSONObject(jsonStr);
                        JSONObject logo = jsonObj.getJSONObject("logo_url");
                        String whitelabel_app_name = logo.getString("whitelabel_app_name");
                        if (!whitelabel_app_name.isEmpty()) SITE_TITLE = whitelabel_app_name;
                        String icon_square = logo.getString("icon_square");
                        String banner_rectangle = logo.getString("banner_rectangle");
                        String form_flow = jsonObj.getString("form_flow");

                        String help_url = "";
                        String privacy_policy_url = "";
                        JSONObject hot_menu = jsonObj.getJSONObject("hot_menu");
                        if (!hot_menu.isNull("whitelabel_FAQ_url")) {
                            help_url = hot_menu.getString("whitelabel_FAQ_url");
                        }
                        if (!hot_menu.isNull("whitelabel_privacy_policy_url")) {
                            privacy_policy_url = hot_menu.getString("whitelabel_privacy_policy_url");
                        }
                        String android_patch_redirect_url = jsonObj.getString("android_patch_redirect_url");
                        ;

                        if (form_flow.equals("single_page")) {
                            saveUserHash("");
                        }

                        saveUserData("whitelabel_app_name", SITE_TITLE);
                        saveUserData("icon_square", icon_square);
                        saveUserData("banner_rectangle", banner_rectangle);
                        saveUserData("form_flow", form_flow);
                        saveUserData("help_url", help_url);
                        saveUserData("privacy_policy_url", privacy_policy_url);
                        saveUserData("android_patch_redirect_url", android_patch_redirect_url);
                        Log.d("TAG", "form_flow: " + form_flow);

                        loadWebview();

                    } catch (final JSONException e) {
                        Log.d("TAG", "error: " + e.getMessage());

                        saveUserData("whitelabel_app_name", "");
                        saveUserData("icon_square", "");
                        saveUserData("banner_rectangle", "");
                        saveUserData("form_flow", "logical_step");

                        loadWebview();
                    }
                }
            }
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {

        }
    }

LOG CAT:

https://paste.ubuntu.com/p/Ryjz5wcR3H/

Любые мысли о предложениях будут очень благодарны.

Спасибо всем.

...