java - 从 Firebase 下载 PDF 后无法打开
问题描述
我正在使用此代码下载并在活动中显示 PDF。下载成功,但下载完成后没有打开。
public class PdfView extends AppCompatActivity {
private PDFView pdfView;
private TextView textView;
private String pdfName = "";
private String pdfUrl = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(pdf_activity);
pdfView = findViewById(R.id.pdfView);
pValue = findViewById(R.id.pValue);
down =findViewById(R.id.down);
if(getIntent().getExtras() != null){
pdfName = getIntent().getExtras().getString("pdf_name");
pdfUrl = getIntent().getExtras().getString("pdf_url");
if(pdfName != null)
pdfName = pdfName.replace("", "")+".pdf";
downloadFile();
}
}
private void downloadFile() {
new AsyncTask<Void, Integer, Boolean>(){
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
return downloadFile();
}
@Nullable
private Boolean downloadFile(){
try {
File file = getFileStreamPath(pdfName);
if(file.exists())return true;
try {
FileOutputStream fileOutputStream =
openFileOutput(pdfName, Context.MODE_PRIVATE);
URL u = new URL(pdfUrl);
URLConnection conn = u.openConnection();
int contentLength = conn.getContentLength();
InputStream input = new BufferedInputStream(u.openStream());
byte data[] = new byte[contentLength];
long total =0;
int count;
while((count = input.read(data)) != -1){
total+= count;
publishProgress((int)((total * 100) / contentLength));
fileOutputStream.write(data,0,count);
}
fileOutputStream.flush();
fileOutputStream.close();
input.close();
return true;
} catch (final Exception e) {
e.printStackTrace();
return false;
}
}catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Boolean aBoolean){
if (aBoolean){
openPdf(pdfName);
}else {
Toast.makeText(PdfView.this, "unable to download ", Toast.LENGTH_SHORT).show();
}
}
}.execute();
}
private void openPdf(String pdfName) {
try {
final File file = getFileStreamPath(pdfName);
if (file != null){
Log.e("file","file"+file.getAbsolutePath());
pdfView.setVisibility(View.VISIBLE);
pdfView.fromFile(file).enableSwipe(true).swipeHorizontal(false).onError(new OnErrorListener() {
@Override
public void onError(Throwable t) {
Log.e("file", "file" + t.toString());
try {
if (file.exists())
file.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
}).enableAntialiasing(true).spacing(2).pageFitPolicy(FitPolicy.WIDTH).load();
}
} catch (Exception e){
e.printStackTrace();
}
}
}
适配器类
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
MainActivity mainActivity;
ArrayList<DownModel> downModels;
public MyAdapter(MainActivity mainActivity, ArrayList<DownModel> downModels) {
this.mainActivity = mainActivity;
this.downModels = downModels;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater layoutInflater = LayoutInflater.from(mainActivity.getBaseContext());
View view = layoutInflater.inflate(R.layout.elements, viewGroup, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) {
myViewHolder.mName.setText(downModels.get(i).getName());
myViewHolder.mLink.setText(downModels.get(i).getLink());
myViewHolder.mDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(myViewHolder.mDownload.getContext(),PdfView.class);
intent.putExtra("pdf_url", downModels.get(i).getLink());
intent.putExtra("pdf_name",downModels.get(i).getName());
myViewHolder.mDownload.getContext().startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return downModels.size();
}
}
2020-02-19 23:08:35.130 1919-1919/com.solutions.rsaggarwal I/时间线:时间线:Activity_launch_request 时间:163047167
2020-02-19 23:08:35.173 1919-1919/com.solutions.rsaggarwal W/ActivityThread:handleWindowVisibility:令牌 android.os.BinderProxy@281d3b6 没有活动
2020-02-19 23:08:35.250 1919-1919/com.solutions.rsaggarwal D/com.shockwave.pdfium.PdfiumCore:启动 PdfiumAndroid 1.9.0
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal E/file: file/data/user/0/com.solutions.rsaggarwal/files/Chapter 1: Organic Chemistry.pdf
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err: java.lang.NullPointerException: 尝试调用虚拟方法'void com.github.barteksc.pdfviewer.PDFView.setVisibility( int)' 在空对象引用上
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err:在 com.solutions.rsaggarwal.PdfView.openPdf(PdfView.java:116)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err:在 com.solutions.rsaggarwal.PdfView.access$200(PdfView.java:27)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err: 在 com.solutions.rsaggarwal.PdfView$1.onPostExecute(PdfView.java:104)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err:在 com.solutions.rsaggarwal.PdfView$1.onPostExecute(PdfView.java:52)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err: 在 android.os.AsyncTask.finish(AsyncTask.java:695)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err:在 android.os.AsyncTask.access$600(AsyncTask.java:180)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err:在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err: 在 android.os.Handler.dispatchMessage(Handler.java:106)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err: 在 android.os.Looper.loop(Looper.java:201)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err: 在 android.app.ActivityThread.main(ActivityThread.java:6823)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err:在 java.lang.reflect.Method.invoke(本机方法)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err:在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
2020-02-19 23:08:35.317 1919-1919/com.solutions.rsaggarwal W/System.err: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
2020-02-19 23:08:39.223 1919-1995/com.solutions.rsaggarwal I/ions.rsaggarwa: ProcessProfilingInfo new_methods=5526 已保存 saved_to_disk=1 resolve_classes_delay=8000
解决方案
推荐阅读
- python - 根据键值拆分嵌套字典
- javascript - javascript缩放与变换比例调整大小
- android - 如何在recyclerview中显示来自firebase的多张图片?我有代码,但我不知道要修改
- android - 安卓开发路线图
- java - 优化频繁平均计算
- python - Plotly Sankey 图,断边问题
- amazon-web-services - 如何在 AWS ECR 上附加存储库策略而不是覆盖
- python - 如何使用 SMTP 中继发送邮件?
- python - 使用相同的键将一个字典的列表变成两个字典的列表
- reactjs - 按下按钮后,我的 React 应用程序进入无限循环