Can anyone help explain why this code works in the Geneymotion emulator but not in any actual android device? The code perfectly works in an emulator, I've had no issues with it, I'm totally confused as to why it won't work in actual device.
Here's the method, which is called when "create PDF" button is clicked:
try {
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/invoices";
File dir = new File(path);
if(!dir.exists())
dir.mkdirs();
Log.d("PDFCreator", "PDF Path: " + path);
File delete = new File(dir, "invoice.pdf");
if (delete.exists())
delete.delete();
File file = new File(dir, "invoice.pdf");
FileOutputStream fOut = new FileOutputStream(file);
PdfWriter.getInstance(doc, fOut);
//open the document
doc.open();
Log.d("test", "PDF Doccument Opened for input");
In the emulator: - when I click the "create PDF" button, email intent is called, and I can choose between email clients to use and send the PDF through it.
In an actual android device: When I click the "create PDF" in an actual device, absolutely nothing happens.
I assume the problem might revolve around the directory where I'm storing the PDF, but I have not been able to resolve it.
If someone could help me, it would be greatly appreciated. Thanks in advance.
NOTE: I'm using DroidText library to produce the PDF.
Log from test on actual device says:
11-05 21:09:14.839 10375-10375/motawaze.com.invoicepdf D/dalvikvm﹕ GC_EXTERNAL_ALLOC freed 93K, 47% free 2913K/5447K, external 0K/0K, paused 30ms
11-05 21:09:25.989 10375-10375/motawaze.com.invoicepdf D/CLIPBOARD﹕ Hide Clipboard dialog at Starting input: finished by someone else... !
11-05 21:09:29.849 10375-10378/motawaze.com.invoicepdf D/dalvikvm﹕ GC_CONCURRENT freed 153K, 47% free 3043K/5639K, external 171K/1281K, paused 7ms+2ms
11-05 21:09:39.899 10375-10378/motawaze.com.invoicepdf D/dalvikvm﹕ GC_CONCURRENT freed 351K, 48% free 3105K/5895K, external 171K/1281K, paused 7ms+3ms
11-05 21:09:53.639 10375-10375/motawaze.com.invoicepdf D/test﹕ set the fields for PDF input
11-05 21:09:53.649 10375-10375/motawaze.com.invoicepdf D/test﹕ set the document
11-05 21:09:53.669 10375-10375/motawaze.com.invoicepdf D/test﹕ set the calender
11-05 21:09:53.669 10375-10375/motawaze.com.invoicepdf D/PDFCreator﹕ PDF Path: /mnt/sdcard/Download/invoices
11-05 21:09:53.669 10375-10375/motawaze.com.invoicepdf E/PDFCreator﹕ ioException:java.io.FileNotFoundException: /mnt/sdcard/Download/invoices/Invoice.pdf (No such file or directory)
11-05 21:10:31.420 10375-10378/motawaze.com.invoicepdf D/dalvikvm﹕ GC_CONCURRENT freed 358K, 48% free 3152K/5959K, external 171K/1281K, paused 7ms+2ms
As mentioned in the chat too. Looks like your PDF is not being created, hence you get the FileNotFoundException
. Look into your PDF creation code. That's the problem.
Change these lines:
if(!dir.exists())
dir.mkdirs();
to:
boolean created = false;
if(!dir.exists())
created = dir.mkdirs();
if(created)
Log.d("test", "Path created");
This will check whether the directory is created or not.