Во-первых, вы должны добавить разрешения для AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
Во-вторых, добавьте этот код, чтобы, если папка не существовала, она проверяла и создавала папку:
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath() + "/download");
if(!dir.exists()) {
dir.mkdirs();
}
В-третьих, как сказал Commons Ware, загрузка в основной ветке не является хорошей практикой; Вы должны реализовать это в новом потоке; потому что во время загрузки основной поток занят загрузкой файла. Если время ожидания будет больше ожидаемого, система выдаст ошибку «Не отвечает».
Для этого вы можете использовать " TaskAsync " или " IntentService " или даже создать новый поток.
Как вы сказали, вы новичок в Java, я предлагаю использовать " TaskAsync ", так как это очень просто и просто.