我正在使用此代码下载和显示活动中的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 /文件: 文件/数据/用户/0/com.solutions.rsaggarwal/文件/第1章:自然 化学.pdf
2020-02-19 23:08:35.317 1919-1919 / com.solutions.rsaggarwal W / System.err:java.lang.NullPointerException:尝试调用 虚方法 com.github.barteksc.pdfviewer.PDFView.setVisibility(int)'为null 对象引用
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