Итак, я пытаюсь загрузить файл PDF с помощью HttpURLConnection, и я думаю, что все сделал правильно с входными и выходными потоками, но когда я открываю загруженный файл PDF (используя встроенный файловый менеджер в Android и/или ADB) , или просто проверить его, передав в OS X, он совершенно пустой и размер показывает 0 байт.
Сайт, с которого я пытаюсь загрузить PDF:
http://www.pdf995.com/samples/pdf.pdf< /под>
Вот мой код
public static void DownloadFile(final String fileURL, final File directory) {
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
try {
FileOutputStream f = new FileOutputStream(directory);
URL u = new URL(fileURL);
c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
//c.setRequestProperty("Content-Type", "application/pdf");
//c.setDoOutput(true);
c.connect();
Log.d("debugz", Integer.toString(c.getContentLength()));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = in.read(buffer)) > 0) {
f.write(buffer, 0, len1);
}
f.flush();
f.getFD().sync();
f.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
public static String getPDF(String pdfurl) {
String extStorageDirectory = Environment.getExternalStorageDirectory()
.toString();
File folder = new File(extStorageDirectory, "schematisktscheman");
folder.mkdir();
File file = new File(folder, "schemainfo.pdf");
try {
file.createNewFile();
} catch (IOException e1) {
e1.printStackTrace();
}
DownloadFile(pdfurl, file);
return null; //added return
}
В моей основной деятельности:
SchedulePdfProcessor.getPDF("http://www.pdf995.com/samples/pdf.pdf");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory() + "/schematisktscheman/schemainfo.pdf")));
РЕДАКТИРОВАТЬ: я запустил сетевой код в основном потоке, что вызвало исключение. Теперь создайте новый поток для загрузки, и он получит пример PDF (http://www.pdf995.com/samples/pdf.pdf) и отлично помещает его содержимое в файл. Спасибо @greenapps!
(len1 = in.read(buffer)) != -1
- person cketti   schedule 28.02.2016Oc.setRequestProperty("Content-Type", "application/pdf");
. Удалите это. Вы не отправляете данные в формате PDF на сервер. - person greenapps   schedule 28.02.2016.setDoOutput(true);
. Удалите это. Вы не делаете вывод. - person greenapps   schedule 28.02.2016file.createNewFile();
. Удалите это заявление. Новый поток вывода файла создаст файл. Более того, даже если у вас есть улов, вы вызываете DownloadFile(), что является плохой практикой. - person greenapps   schedule 28.02.2016