0
 ## This is the pdfActivity which receives the URL of pdf and displays it in pdf viewer##

  public class PDFActivity extends AppCompatActivity implements OnLoadCompleteListener, OnPageChangeListener,OnPageErrorListener {
            private static final String TAG ="THERE" ;
            Integer pageNumber = 0;
            ProgressBar pdfViewProgressBar;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_pdf);

                final PDFView pdfView= findViewById(R.id.pdfView);
                pdfViewProgressBar=findViewById(R.id.pdfViewProgressBar);

                pdfViewProgressBar.setVisibility(View.VISIBLE);

                //UNPACK OUR DATA FROM INTENT
                Intent i=this.getIntent();
                final String path=i.getExtras().getString("PATH");
                System.out.print(path);
                FileLoader.with(this)
                        .load(path,false) //2nd parameter is optioal, pass true to force load from network
                        .fromDirectory("My_PDFs", FileLoader.DIR_INTERNAL)
                        .asFile(new FileRequestListener<File>() {
                            @Override
                            public void onLoad(FileLoadRequest request, FileResponse<File> response) {
                                pdfViewProgressBar.setVisibility(View.GONE);
                                File pdfFile = response.getBody();
                                try {
                                    pdfView.fromFile(pdfFile).defaultPage(1).enableSwipe(true).load();



                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                            @Override
                            public void onError(FileLoadRequest request, Throwable t) {
                                pdfViewProgressBar.setVisibility(View.GONE);
                                Toast.makeText(PDFActivity.this, t.getMessage(), Toast.LENGTH_LONG).show();
                            }
                        });
            }
            @Override
            public void loadComplete(int nbPages) {
                pdfViewProgressBar.setVisibility(View.GONE);
                Toast.makeText(PDFActivity.this, String.valueOf(nbPages), Toast.LENGTH_LONG).show();
            }
            @Override
            public void onPageError(int page, Throwable t) {
                pdfViewProgressBar.setVisibility(View.GONE);
                Toast.makeText(PDFActivity.this, t.getMessage(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onPageChanged(int page, int pageCount) {
                pageNumber = page;
                setTitle(String.format("%s %s / %s", "File", page + 1, pageCount));
            }
            public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
                for (PdfDocument.Bookmark b : tree) {

                    Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

                    if (b.hasChildren()) {
                        printBookmarksTree(b.getChildren(), sep + "-");
                    }
                }
            }
        }




## MainActivity which retrieves values from mysql and pass those to pdfActivity ##
        public class MainActivity extends AppCompatActivity {

            public class PDFDoc {
                int id;
                String name,category,pdfURL,pdfIconURL;
                public int getId() {return id;}
                public void setId(int id) {this.id = id;}
                public String getName() {return name;}
                public void setName(String name) {this.name = name;}
                public String getAuthor() {return category;}
                public void setCategory(String category) {this.category = category;}
                public String getPdfURL() {return pdfURL;}
                public void setPdfURL(String pdfURL) {this.pdfURL = pdfURL;}
                public String getPdfIconURL() {return pdfIconURL;}
                public void setPdfIconURL(String pdfIconURL) {this.pdfIconURL = pdfIconURL;}
            }
            /*
            Our custom adapter class
             */
            public class GridViewAdapter extends BaseAdapter {
                Context c;
                ArrayList<PDFDoc> pdfDocuments;

                public GridViewAdapter(Context c, ArrayList<PDFDoc> pdfDocuments) {
                    this.c = c;
                    this.pdfDocuments = pdfDocuments;
                }
                @Override
                public int getCount() {return pdfDocuments.size();}
                @Override
                public Object getItem(int pos) {return pdfDocuments.get(pos);}
                @Override
                public long getItemId(int pos) {return pos;}
                @Override
                public View getView(int pos, View view, ViewGroup viewGroup) {
                    if(view==null)
                    {
                        view= LayoutInflater.from(c).inflate(R.layout.row_model,viewGroup,false);
                    }

                    TextView txtName = view.findViewById(R.id.pdfNameTxt);
                    TextView txtAuthor = view.findViewById(R.id.authorTxt);
                    ImageView pdfIcon = view.findViewById(R.id.imageView);

                    final PDFDoc pdf= (PDFDoc) this.getItem(pos);

                    txtName.setText(pdf.getName());
                    txtAuthor.setText(pdf.getAuthor());

                    if(pdf.getPdfURL() != null && pdf.getPdfURL().length()>0)
                    {
                        Picasso.get().load(pdf.getPdfIconURL()).placeholder(R.drawable.placeholder).into(pdfIcon);
                    }else {
                        Toast.makeText(c, "Empty Image URL", Toast.LENGTH_LONG).show();
                        Picasso.get().load(R.drawable.pdf_icon).into(pdfIcon);
                    }
                    view.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Toast.makeText(c, pdf.getName(), Toast.LENGTH_SHORT).show();
                            Intent i=new Intent(c,PDFActivity.class);
                            i.putExtra("PATH",pdf.getPdfURL());
                            c.startActivity(i);
                        }
                    });

                    return view;
                }
            }
            /*
            Our HTTP Client
             */
            public class JSONDownloader {
                private static final String PDF_SITE_URL="https://project-fyp.000webhostapp.com/ind.php";
                private final Context c;
                private GridViewAdapter adapter ;

                public JSONDownloader(Context c) {
                    this.c = c;
                }
                /*
                DOWNLOAD PDFS FROM MYSQL
                 */
                public void retrieve(final GridView gv, final ProgressBar myProgressBar)
                {
                    final ArrayList<PDFDoc> pdfDocuments = new ArrayList<>();

                    myProgressBar.setIndeterminate(true);
                    myProgressBar.setVisibility(View.VISIBLE);

                    AndroidNetworking.get(PDF_SITE_URL)
                            .setPriority(Priority.MEDIUM)
                            .build()
                            .getAsJSONArray(new JSONArrayRequestListener() {
                                @Override
                                public void onResponse(JSONArray response) {
                                    JSONObject jo;
                                    PDFDoc p;
                                    try
                                    {
                                        for(int i=0;i<response.length();i++)
                                        {
                                            jo=response.getJSONObject(i);

                                            int id=jo.getInt("id");
                                            String name=jo.getString("name");
                                            String category=jo.getString("category");
                                            String description=jo.getString("description");
                                            String pdfURL=jo.getString("pdf_url");
                                            String pdfIconURL=jo.getString("pdf_icon_url");

                                            p=new PDFDoc();
                                            p.setId(id);
                                            p.setName(name);
                                            p.setCategory(category);
                                            p.setCategory(description);
                                            p.setPdfURL(PDF_SITE_URL+pdfURL);
                                            p.setPdfIconURL(PDF_SITE_URL+pdfIconURL);

                                            pdfDocuments.add(p);
                                        }
                                        adapter =new GridViewAdapter(c,pdfDocuments);
                                        gv.setAdapter(adapter);
                                        myProgressBar.setVisibility(View.GONE);

                                    }catch (JSONException e)
                                    {
                                        myProgressBar.setVisibility(View.GONE);
                                        Toast.makeText(c, "GOOD RESPONSE BUT JAVA CAN'T PARSE JSON IT RECEIEVED. "+e.getMessage(), Toast.LENGTH_LONG).show();
                                    }
                                }
                                //ERROR
                                @Override
                                public void onError(ANError error) {
                                    error.printStackTrace();
                                    myProgressBar.setVisibility(View.GONE);
                                    Toast.makeText(c, "UNSUCCESSFUL :  ERROR IS : "+error.getMessage(), Toast.LENGTH_LONG).show();
                                }
                            });
                }
            }
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                final GridView myGridView= findViewById(R.id.myGridView);
                Button btnRetrieve= findViewById(R.id.downloadBtn);
                final ProgressBar myProgressBar= findViewById(R.id.myProgressBar);

                btnRetrieve.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        new JSONDownloader(MainActivity.this).retrieve(myGridView,myProgressBar);
                    }
                });
            }
        }

这是我得到的错误:

E/.hfad.pdfviewe:未找到长 com.shockwave.pdfium.PdfiumCore.nativeOpenDocument(int, java.lang.String) 的实现(尝试 Java_com_shockwave_pdfium_PdfiumCore_nativeOpenDocument 和 Java_com_shockwave_pdfium_PdfiumCore_nativeOpenDocument__ILjava_lang_String_2) E/PDFView:加载 pdf 错误 java.lang.UnsatisfiedLinkError:否在 com.shockwave.pdfium.PdfiumCore.nativeOpenDocument(Native Method) at com.shockwave.pdfium.PdfiumCore .newDocument(PdfiumCore.java:113) 在 com.github.barteksc.pdfviewer.source.FileSource.createDocument(FileSource.java:38) 在 com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:53) at com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:25) at android.os.AsyncTask$2.call(AsyncTask.java:333 ) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. java:641) 在 java.lang.Thread.run(Thread.java:764) ##FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang .Thread.run(Thread.java:764) ##FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang .Thread.run(Thread.java:764) ##

4

0 回答 0