это мой первый пост - так что я надеюсь, что все правильно в отношении форматирования кода.api level 8 HttpURLConnection
Может быть, вы можете помочь мне со следующей проблемой:
С API-Level 10 и выше, все мои HttpURLConnections работают отлично, но с API уровня 8 некоторые (или иногда большинство) из моих попыток загрузить содержимое файла (txt, html ...) не выполняется.
Я работал над этим, просто повторяя загрузку, когда сервер вернул код ответа «-1». Это не очень приятно, но работает (более или менее), но я думаю, что это работает только из-за того, что контент, который я получаю, очень короткий (не более 100 символов) - и иногда я думаю, что некоторые символы в конце были опущены, слишком.
Но теперь я попытался внедрить процедуру обновления (загрузку и установку apk-файла), которая в большинстве случаев терпит неудачу, поскольку файл apk фрагментирован (я думаю), поэтому я получаю «ошибку анализа» при попытке для установки файла.
Что я делаю неправильно?
Благодарим за помощь (и дружелюбие, если вы лучше меня g)!
Вот код моей рутины обновления (который - как вы можете видеть - не имеет повторяющийся механизма, как описан выше):
String download_url = "http://url/";
String download_file = "name.apk";
//Local
String update_file = download_file;
File update_file_stream = context.getFileStreamPath(update_file);
//Connect
URL url = new URL(download_url + download_file);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
//Delete local File?
if(update_file_stream.exists()){
update_file_stream.delete();
}
//Download File
FileOutputStream fos = context.openFileOutput(update_file, Context.MODE_WORLD_READABLE);
InputStream is = c.getInputStream();
byte[] buffer = new byte[4096];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
//Install
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(update_file_stream), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Привет ... спасибо за ваш ответ! Я знаю об этой проблеме, но вся сетевая активность выполняется либо в «защищенной Void doInBackground (String ... arg0) {}», либо в «новой AsyncTask() {}". Таким образом, это не вызывает проблемы. –