我正在为我的项目使用此github源。我有一个在assets
文件夹中具有10个元素和10个不同PDF的listView。在1个活动中,我正在使用listview
和onItemClickListener
,如下所示:
ArrayAdapter arrayAdapter = new ArrayAdapter<>(this, R.layout.activity_policy_list, mobileArray);
ListView listView = (ListView) findViewById(R.id.policy_list);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(PolicyActivity.this, PdfViewerActivity.class);
intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, getAssets() + "/dummy.pdf");
startActivity(intent);
}
});
PdfViewerActivity
类的代码如下:
package com.dell.eventapp.ui.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.dell.eventapp.R;
public class PdfViewerActivity extends net.sf.andpdf.pdfviewer.PdfViewerActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pdf_viewer);
}
@Override
public int getPreviousPageImageResource() {
return R.drawable.left_arrow;
}
@Override
public int getNextPageImageResource() {
return R.drawable.right_arrow;
}
@Override
public int getZoomInImageResource() {
return R.drawable.zoom_in;
}
@Override
public int getZoomOutImageResource() {
return R.drawable.zoom_out;
}
@Override
public int getPdfPasswordLayoutResource() {
return 0;
}
@Override
public int getPdfPageNumberResource() {
return 0;
}
@Override
public int getPdfPasswordEditField() {
return 0;
}
@Override
public int getPdfPasswordOkButton() {
return 0;
}
@Override
public int getPdfPasswordExitButton() {
return 0;
}
@Override
public int getPdfPageNumberEditField() {
return 0;
}
}
当我单击列表视图中的任何项目时,应打开新活动,并且应在新活动中查看PDF。运行代码时,我总是会收到此错误:
02-23 18:19:48.033 8982-8982/com.dell.eventapp I/PDFVIEWER: ST='file 'android.content.res.AssetManager@817d40c/dummy.pdf' not found'
我在GitHub Repo的问题中遇到了这个问题。它说不能从资产文件夹加载PDF。打开之前,您应该在sdcard上复制它。我该如何处理?
intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, getAssets() + "/dummy.pdf");
getAssets()
返回AssetManager
。getAssets() + "/dummy.pdf"
在AssetManager
实例上调用toString()
,然后将/dummy.pdf
附加到它。这就是为什么您结束android.content.res.AssetManager@817d40c/dummy.pdf
的原因。AssetManager
上的toString()
并不能以某种方式神奇地为您提供资产的文件系统路径...部分是因为资产不是设备上的文件。
我该如何处理?
要么:
遵循该问题中的说明,并将资产复制到文件,或
修改该库以支持资产,或
不要使用该库,而是使用其他支持从资产显示PDF的东西
fwiw,我有示例应用程序,证明了使用pdf.js
和PDFIUM在资产中显示PDF的使用。