Здравствуйте, сообщество переполнения стека.
Я - моя последняя надежда:
У нас разрабатывается приложение для Android ...
Пользователям предоставляется возможность загрузить изображение с камеры или локально из галереи.
В обоих случаях мы видим, что предварительный просмотр изображения / миниатюра корректно отображаются в приложении после того, как пользователь выберет изображение (или сделает снимок с камеры).
Другими словами, я считаю, что мы можем подтвердить, что изображение получено / выбрано / установлено успешно.
Как только пользователь выбирает изображение файла, отображается индикатор выполнения «Загрузка ...»:
Для файлов изображений размером менее ~ 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/
Любые мысли о предложениях будут очень благодарны.
Спасибо всем.