Android: как скачивать бинарные файлы из интернета - PullRequest
1 голос
/ 03 мая 2011

Я хочу скачать файл из интернета. И пока у меня есть фф. коды:

package com.example.downloadfile;

import java.io.BufferedOutputStream;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class DownloadFile extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = new TextView(this);

        String url = "http://www.fullissue.com/wp-content/uploads/2010/12/Adam-Lambert.jpg";
        String FileName = "/LocalDisk/jm"; // save in your sdcard


        try{

            java.io.BufferedInputStream in = new java.io.BufferedInputStream(new java.net.URL(url).openStream());
            java.io.FileOutputStream fos = new java.io.FileOutputStream(FileName);
            java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
            byte[] data = new byte[1024];
                int x=0;
                while((x=in.read(data,0,1024))>=0){
                    bout.write(data,0,x);               
                }
            fos.flush();
            bout.flush();
            fos.close();
            bout.close();
            in.close();

        }catch (Exception e){
            /* Display any Error to the GUI. */
            tv.setText("Error: " + e.getMessage());
        }

      this.setContentView(tv);
    }
}

Я получаю сообщение об ошибке, когда я запускаю этот код, у меня появляется « Ошибка: / LocalDisk / jm » в моем пользовательском интерфейсе.

Большое спасибо заранее за любую помощь! Я новичок в Java и Android Dev ...:)

1 Ответ

1 голос
/ 03 мая 2011

String FileName = "/ LocalDisk / jm";

Это абсолютный путь, поэтому вы должны использовать его вот так

String FileName = Environment.getExternalStorageDirectory() + "/jm"; // /sdcard/jm

Подробнее о getExternalStorageDirectory () .Также не стоит загружать файл в потоке пользовательского интерфейса, поскольку он блокирует операцию и может вызвать активность не отвечает.Лучшим способом будет использовать AsyncTask для обработки этой операции в фоновом режиме и уведомления графического интерфейса пользователя, когда вы закончите.

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