Android AsyncTask с использованием HttpURLConnection lenghtOfFile -1 нужна помощь - PullRequest
0 голосов
/ 12 июля 2011

Я пытаюсь загрузить файл mp в фоновом режиме, используя AsyncTask, в эмулятор, он работает нормально ... но в divice он не показывает progressbar эта проблема связана с тем, когда я запускаю этот код

 int  lenghtOfFile = c.getContentLength();
 Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);

это дает мне -1, почему это счастье? мой код

 @Override
            protected String doInBackground(String... arg0) {
                // TODO Auto-generated method stub
                // mp3load();
                int len1 = 0;
                int count;
                try {
                    URL url = new URL(GlobalVariable.Getstr());
                    HttpURLConnection c = (HttpURLConnection) url.openConnection();
                    c.setRequestMethod("GET");
                    c.setDoOutput(true);
                    c.connect();
                    int lenghtOfFile = c.getContentLength();
                    Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
                    String PATH = Environment.getExternalStorageDirectory()
                            + "/download/";
                    Log.v(LOG_TAG, "PATH: " + PATH);
                    File file = new File(PATH);
                    file.mkdirs();

                    // String fileName = "workTest.mp3";
                    String fileName = GlobalVariable.Getstrpath().toString();

                    File outputFile = new File(file, fileName);

                    FileOutputStream fos = new FileOutputStream(outputFile);

                    InputStream is = c.getInputStream();

                    byte[] buffer = new byte[1024];
                    long total = 0;

                    while ((count = is.read(buffer)) != -1) {
                        total += count;
                        publishProgress("" + (int) ((total * 100) / lenghtOfFile));
                        // fos.write(buffer, 0, len1);
                        fos.write(buffer, 0, count);
                    }
                    fos.close();
                    is.close();

                } catch (IOException e) {
                    Log.d(LOG_TAG, "Error: " + e);
                }
                return null;
            }

            protected void onProgressUpdate(String... progress) {
                Log.d("ANDRO_ASYNC", progress[0]);

                mProgressDialog.setProgress(Integer.parseInt(progress[0]));
            }

            protected void onPostExecute(String unused) {
                dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
                refreshList();
                Toast.makeText(
                        FindFilesByType.this,
                        "Downloading of " + GlobalVariable.Getstrpath()
                                + " complete.", Toast.LENGTH_LONG).show();
    //          Intent i = new Intent(FindFilesByType.this, SongList.class);
    //          finish();
    //          startActivity(i);
                try{
                Intent i = new Intent(FindFilesByType.this, SongList.class);
                finish();
                startActivity(i);}catch (Exception e) {
                    // TODO: handle exception
                }
            }
        }

код entiere отлично работает для эмулятора
но это всегда не показывает мой прогресс, но загрузка происходит успешно
спасибо Pragna

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

У меня такая же проблема (только на Android 4.0) и удаление

c.setDoOutput(true);

исправил это для меня.

0 голосов
/ 12 июля 2011

Somethimes Java не может получить размер удаленного файла, и я думаю, что это ваша проблема.Но при отладке кода, пожалуйста, проверьте интернет-соединение на вашем телефоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...