2013-02-23 3 views
0

это мой первый пост - так что я надеюсь, что все правильно в отношении форматирования кода.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); 

ответ

0

Посмотрите, как сеть по главному вопросу темы.

В предыдущей версии Android SDK (возможно, 8), вы можете сделать некоторые сети на основной поток

, но после того, как ICS или Соты вы не можете сделать любой сетевой материал на основной поток.

+0

Привет ... спасибо за ваш ответ! Я знаю об этой проблеме, но вся сетевая активность выполняется либо в «защищенной Void doInBackground (String ... arg0) {}», либо в «новой AsyncTask () {}". Таким образом, это не вызывает проблемы. –

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