【问题标题】:Android, Attempting to view PDF within Xamarin Android AppAndroid,尝试在 Xamarin Android 应用程序中查看 PDF
【发布时间】:2016-12-24 12:16:59
【问题描述】:

我正在尝试通过我的 Android 应用查看 PDF,我正在使用这个库: https://www.nuget.org/packages/Xamarin.PdfView.Android/

我的代码如下所示:

C#:

using Com.Joanzapata.Pdfview; 
using Java.IO;

namespace Xamarin_test
{
    [Activity(Label = "Xamarin", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);

            PDFView pdfView = FindViewById<PDFView>(Resource.Id.pdfview);

            pdfView.FromAsset("test.pdf")
                    .DefaultPage(1)
                    .ShowMinimap(false)
                    .EnableSwipe(true)
                    .Load();
        }
    }
}

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <com.joanzapata.pdfview.PDFView
        android:id="@+id/pdfview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

当我尝试运行它时,我收到此错误:

Java.Lang.RuntimeException:执行doInBackground()时出错

这是什么原因造成的?

谢谢。

编辑,完整的错误日志:

Java.Lang.RuntimeException: An error occured while executing doInBackground()

08-17 15:09:23.301 E/AndroidRuntime( 2153): FATAL EXCEPTION: AsyncTask #1
08-17 15:09:23.301 E/AndroidRuntime( 2153): Process: Xamarin_MuPDF.Xamarin_MuPDF, PID: 2153
08-17 15:09:23.301 E/AndroidRuntime( 2153): java.lang.RuntimeException: An error occured while executing doInBackground()
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at android.os.AsyncTask$3.done(AsyncTask.java:304)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.lang.Thread.run(Thread.java:818)
08-17 15:09:23.301 E/AndroidRuntime( 2153): Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/Xamarin_MuPDF.Xamarin_MuPDF-1/base.apk"],nativeLibraryDirectories=[/data/app/Xamarin_MuPDF.Xamarin_MuPDF-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libvudroid.so"
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.lang.Runtime.loadLibrary(Runtime.java:367)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.lang.System.loadLibrary(System.java:988)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at org.vudroid.core.VuDroidLibraryLoader.load(VuDroidLibraryLoader.java:13)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at org.vudroid.pdfdroid.codec.PdfContext.<clinit>(PdfContext.java:13)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at com.joanzapata.pdfview.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:50)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at com.joanzapata.pdfview.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:1)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at android.os.AsyncTask$2.call(AsyncTask.java:292)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-17 15:09:23.301 E/AndroidRuntime( 2153):     ... 3 more
08-17 15:09:26.751 I/Process ( 2153): Sending signal. PID: 2153 SIG: 9

【问题讨论】:

  • 请发布完整的错误日志。
  • 我已经添加了完整的错误日志。

标签: c# android pdf xamarin xamarin.android


【解决方案1】:

发生这种情况是因为您错过了链接libvudroid.so。 pdfview 需要这个库。

你必须

  • 从here下载库
  • 在您的 Android 项目中创建一个文件夹 lib
  • 将文件夹arm64-v8a, armeabi-v7a, armeabi, x86复制到文件夹中
  • 将libvudroid.so 包含到项目中并设置属性(右键单击文件-> 属性)
    • 构建操作:AndroidNativeLibrary
    • 复制到输出目录:始终复制

疑难解答

如果您收到构建错误:mandroid error XA0000: Invalid create-package command: ...

  • 打开项目属性
  • Android 选项
  • 高级
  • 选择所有平台(如果全部选择,请取消选择一个并重新选择它)
  • 保存
  • 再次构建

【讨论】:

  • 先生,如果你现在在这里,我会拥抱你!你是超级明星!非常感谢您抽出宝贵时间写出关于所发生事情的非常详细的解释。我设法让这个工作!再次感谢您,先生!如果你在亚特兰大,请联系我,我会带你出去喝酒。
猜你喜欢
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
相关资源
最近更新 更多