【问题标题】:Pdfview Library not loading using urlPdfview 库未使用 url 加载
【发布时间】:2020-11-09 13:31:12
【问题描述】:

我想从 firebase 存储下载 pdf 文件并在 Pdfview 中显示它,但它没有使用 fireabse 提供的 url 加载。它没有显示任何错误,只是页面保持空白。我


        firebaseAuth = FirebaseAuth.getInstance();
        firebaseUser = firebaseAuth.getCurrentUser();
        if (firebaseUser != null) {
            currentUserId = firebaseUser.getUid();

            pdfView = findViewById( R.id.pdfViewRead );

            pdfUrl = getIntent().getStringExtra( "pdfUrl" );
            String bookKey = getIntent().getStringExtra( "bookKey" );

            Log.i( "URL", pdfUrl );
            Log.i( "URL2", Uri.parse( pdfUrl ).toString() );

            pdfUri = Uri.parse( pdfUrl );

            displayPdf();


        }
    }

    private void displayPdf() {
        pdfView.fromUri(  pdfUri )
                .enableSwipe( true )
                .enableAnnotationRendering( true )
                .scrollHandle( new DefaultScrollHandle( this ) )
                .load();

    }

【问题讨论】:

  • url是http还是https?
  • @AbhayKoradiya 它是 https 类型,它是 firebase 存储下载链接。例如 = "firebasestorage.googleapis.com/v0/b/…"
  • 不,这不是 pdf 链接。
  • @AbhayKoradiya 为什么?我已经上传了pdf文件。哪里出了问题??
  • 我认为它只支持以“.pdf”结尾的链接。

标签: java android android-studio pdf


【解决方案1】:

对于那些将来发现此错误的人来说,这里是解决方案。 您不能直接从 url 加载 pdf。首先,您需要将其下载到设备的本地存储中,然后使用 fromFile 加载它,我有这样的外观。 第 1 步)您已将文件从 firebase 存储下载到本地设备,作为永久或临时文件,我已下载临时文件。 第 2 步)使用下载的文件将 pdf 加载到您的应用程序 第 3 步)恭喜你完成了 快乐编码*

``firebaseAuth = FirebaseAuth.getInstance();
    firebaseUser = firebaseAuth.getCurrentUser();
    if (firebaseUser != null) {
        currentUserId = firebaseUser.getUid();

        pdfView = findViewById( R.id.pdfViewRead );
        progressBar = findViewById( R.id.progressBarActivityRead );

        //pdfUrl = getIntent().getStringExtra( "pdfUrl" );
        bookKey = getIntent().getStringExtra( "bookKey" );
        pdfName = getIntent().getStringExtra( "pdfName" );
        databaseReference = FirebaseDatabase.getInstance().getReference( "RecentRead" ).child( currentUserId )
        .child( bookKey );

        //     Log.i( "URL", pdfUrl );

// Log.i( "URL2", Uri.parse( pdfUrl ).toString() );

// pdfUri = Uri.parse(pdfUrl);

        //  Toast.makeText( this, pdfUrl + "   " + bookKey, Toast.LENGTH_LONG).show();

        //   displayPdf();
        try {
            readData();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private void readData() throws IOException {
    progressBar.setVisibility( View.VISIBLE );
    final File outputFile = File.createTempFile( "file", "pdf" );

    StorageReference storageReference = FirebaseStorage.getInstance().getReference().
            child( "Users" ).child( currentUserId ).child( "Pdf" )
            .child( pdfName );

    storageReference.getFile( outputFile ).addOnSuccessListener( new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {

            Toast.makeText( ReadPdfActivity.this, "File Downloaded", Toast.LENGTH_SHORT ).show();
           displayPdf( outputFile )
        }
    } ).addOnProgressListener( new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
        @Override
        public void onProgress(@NonNull FileDownloadTask.TaskSnapshot taskSnapshot) {
            // Add Progress
        }`enter code here`
    } );
}

private void displayPdf(File file) {
    progressBar.setVisibility( View.INVISIBLE );
    pdfView.fromFile( file )
            .defaultPage( 20 )
            .enableSwipe( true )
            .swipeHorizontal( true )
            .pageSnap( true )
            .autoSpacing( true )
            .pageFling( true )
            .enableAnnotationRendering( true )
            .scrollHandle( new DefaultScrollHandle( this ) )
            .load();
}``

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 2018-07-14
    • 2022-12-12
    • 2012-05-03
    • 2015-10-23
    • 2018-08-07
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多