我从聊天中得到一个 .pdf 文件,我想下载它并使用 acrobat 阅读器显示它。以下是我的代码
public void showPDF(String pdf)
{
try
{
Log.i("pic", " * * * in showPdf" + pdf);
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
File folder = new File(extStorageDirectory, "pdf");
folder.mkdir();
String pdf_name = pdf.replace(".pdf", "");
pdf_name = pdf_name.replace("/fileupload/data/chat/", "");
File file = new File(folder, pdf_name + ".pdf");
try
{
file.createNewFile();
}
catch (IOException e1)
{
e1.printStackTrace();
}
Log.i("pic", " * * * ready to download");
new DownloadFile(file, Functions.getServiceProtocol() + Functions.getServiceDomain() + pdf, pdf_name).execute();
}
catch (Exception e)
{
Log.i("pic", " CATCH * * * in showPdf");
}
}
}
private class DownloadFile extends AsyncTask<String, Integer, String>
{
private String fileURL, pdfname;
private File directory;
private ProgressDialog dlg = new ProgressDialog(CameraWebview.this);
public DownloadFile(File d, String f, String n)
{
directory = d;
fileURL = f;
pdfname = n;
}
@Override
protected String doInBackground(String... sUrl)
{
try
{
Log.i("pic", " TRY * * * download file");
FileOutputStream f = new FileOutputStream(directory);
URL u = new URL(fileURL);
HttpURLConnection c = (HttpURLConnection)u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
long total = 0;
int count;
while ((count = in.read(buffer)) != -1) {
total += count;
f.write(buffer, 0, count);
}
f.flush();
f.close();
try
{
Log.i("pic", " TRY * * * calling displayPdf");
displayPdf(pdfname);
}
catch(Exception ex)
{
Log.i("pic", " CATCH * * * calling displayPdf");
}
}
catch (Exception e)
{
}
return null;
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
dlg.setMessage("Downloading File ...");
dlg.show();
}
@Override
protected void onProgressUpdate(Integer... progress)
{
super.onProgressUpdate(progress);
mProgressDialog.setProgress(progress[0]);
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
if (dlg.isShowing())
dlg.dismiss();
}
}
public void displayPdf(String pdf_name)
{
try
{
Log.i("pic", " TRY * * * ready to show pdf");
File file = new File(Environment.getExternalStorageDirectory() + "/pdf/" + pdf_name + ".pdf");
PackageManager packageManager = getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW);
testIntent.setType("application/pdf");
List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/pdf");
startActivity(intent);
Log.i("pic", " TRY * * * here is the pdf");
}
catch (Exception e)
{
Log.i("pic", " CATCH * * * show pdf file" + e.toString());
}
它总是说“文件损坏”。我检查了我正在使用的网址,这很好。我的应用程序也是冰淇淋三明治。我究竟做错了什么 ?