I installed this library to view pdf from a url inside my application but when I click on the file to open it gives me the following error:
I tried looking into ContentResolver but no luck
This is the logcat:
07-26 15:35:45.638 8725-8725/com.focuson.iapp.firstapp E/PDFView: load pdf error
java.io.FileNotFoundException: No content provider: http://pub.mylaravel.eu/assets/user_files/3/file_no_1.pdf
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1093)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:944)
at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:797)
at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:751)
at com.github.barteksc.pdfviewer.DecodingAsyncTask.getSeekableFileDescriptor(DecodingAsyncTask.java:82)
at com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:61)
at com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:30)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
My activity is:
public class pdfActivity extends AppCompatActivity {
PDFView pdfView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pdf);
pdfView= (PDFView) findViewById(R.id.pdfView);
String url=getIntent().getStringExtra("url");
Log.i("URI-URL",String.valueOf(Uri.parse(url)) );
pdfView.fromUri(Uri.parse(url))
.enableSwipe(true)
.enableDoubletap(true)
.swipeVertical(false)
.defaultPage(1)
.showMinimap(false)
.onLoad(new OnLoadCompleteListener() {
@Override
public void loadComplete(int nbPages) {
}
})
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
}
})
.enableAnnotationRendering(false)
.password(null)
.load();}}
My xml is:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.focuson.iapp.firstapp.page_types.Login.pdfActivity">
<com.github.barteksc.pdfviewer.PDFView
android:id="@+id/pdfView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Seems that this library fails to download files from the internet. Download the file to a temp directory and open it:
if (ActivityCompat.checkSelfPermission(WebViewActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(WebViewActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(WebViewActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
downloadFile();
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE:
downloadFile();
break;
}
}
private void downloadFile() {
progressBar.setVisibility(View.VISIBLE);
DownloadFileTask task = new DownloadFileTask(
WebViewActivity.this,
mURL,
"/download/pdf_file.pdf");
task.startTask();
}
@Override
public void onFileDownloaded() {
progressBar.setVisibility(View.GONE);
File file = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ "/download/pdf_file.pdf");
if (file.exists()) {
pdfView.fromFile(file)
//.pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default
.enableSwipe(true)
.swipeHorizontal(true)
.enableDoubletap(true)
.defaultPage(0)
.enableAnnotationRendering(true)
.password(null)
.scrollHandle(null)
.onLoad(new OnLoadCompleteListener() {
@Override
public void loadComplete(int nbPages) {
pdfView.setMinZoom(1f);
pdfView.setMidZoom(5f);
pdfView.setMaxZoom(10f);
pdfView.zoomTo(2f);
pdfView.scrollTo(100,0);
pdfView.moveTo(0f,0f);
}
})
.load();
}
}
public class DownloadFileTask {
public static final String TAG = "DownloadFileTask";
private BaseActivity context;
private GetTask contentTask;
private String url;
private String fileName;
public DownloadFileTask(BaseActivity context, String url, String fileName) {
this.context = context;
this.url = url;
this.fileName = fileName;
}
public void startTask() {
doRequest();
}
private void doRequest() {
contentTask = new GetTask();
contentTask.execute();
}
private class GetTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... arg0) {
int count;
try {
Log.d(TAG, "url = " + url);
URL _url = new URL(url);
URLConnection conection = _url.openConnection();
conection.connect();
InputStream input = new BufferedInputStream(_url.openStream(),
8192);
OutputStream output = new FileOutputStream(
Environment.getExternalStorageDirectory() + fileName);
byte data[] = new byte[1024];
while ((count = input.read(data)) != -1) {
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
return null;
}
protected void onPostExecute(String data) {
context.onFileDownloaded();
}
}
}