Как просмотреть PDF из списка, который извлекается из базы данных Firebase? - PullRequest
1 голос
/ 04 мая 2020

Я получил представление списка PDF из базы данных Firebase

Это код, который я использовал для получения

public class ViewFiles extends AppCompatActivity {

ListView myViewFiles;
DatabaseReference databaseReference;
List<uploadFiles> uploadDOCS;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_files);

    myViewFiles = (ListView) findViewById(R.id.myViewFiles);
    uploadDOCS = new ArrayList<uploadFiles>();

    viewAllFiles();

    myViewFiles.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            uploadFiles uploadFiles = uploadDOCS.get(position);

            Intent intent = new Intent();
            intent.setType(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(uploadFiles.getUrl()));
            intent = new Intent(ViewFiles.this, ViewPdfFiles.class);
            startActivity(intent);
        }
    });
}

private void viewAllFiles() {

    databaseReference = FirebaseDatabase.getInstance().getReference("HNDIT").child("1st Year 2nd Sem").child("ENGLISH");
    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()){

                uploadFiles uploadFiles = postSnapshot.getValue(com.example.lms.fileupload.uploadFiles.class);
                uploadDOCS.add(uploadFiles);
            }

            String[] uploads = new String[uploadDOCS.size()];

            for (int i=0; i < uploads.length; i++){
                uploads[i] = uploadDOCS.get(i).getName();

            }
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,uploads){
                @NonNull
                @Override
                public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                    View view = super.getView(position, convertView, parent);
                    TextView myText = (TextView) view.findViewById(android.R.id.text1);
                    myText.setTextColor(Color.BLACK);

                    return view;
                }
            };
            myViewFiles.setAdapter(adapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

}

}

Вот как это выглядит Нажмите здесь, чтобы посмотреть

И у меня есть намерение для просмотра этих файлов в формате PDF в android, но он не будет отображаться оставьте поле пустым, это сообщение об ошибке

E / PDFView: ошибка загрузки pdf java .lang.NullPointerException: попытка вызвать виртуальный метод 'int java .io.InputStream.read (byte []) 'для пустой ссылки на объект на com.github.barteks c .pdfviewer.util.Util.toByteArray (Util. java: 36) на com.github.barteks c .pdfviewer.source.InputStreamSource.createDocument ( InputStreamSource. java: 37) на com.github.barteks c .pdfviewer.DecodingAsyncTask.doInBackground (DecodingAsyncTask. java: 53) на com.github.barteks c .pdfviewer.DecodingAsyncTask.doInBackground (Dec. java: 25) на android .os.AsyncTask $ 2.call (AsyncTask. java: 333) на java .util.concurrent.Futu reTask.run (FutureTask. java: 266) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1167) в java .util.concurrent.ThreadPoolExecutor $ Threader.runec. java: 641) в java .lang.Thread.run (Thread. java: 764)

это код этого

public class ViewPdfFiles extends AppCompatActivity {

private PDFView pdfView;
private String url;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_pdf_files);

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


    Bundle bundle = getIntent().getExtras();
    if (bundle != null) {
        url = getIntent().getStringExtra("url");
    }
    new RetrievePDFStream().execute(url);
}


class RetrievePDFStream extends AsyncTask<String,Void, InputStream> {
    @Override
    protected InputStream doInBackground(String... strings) {
        InputStream inputStream = null;

        try{

            URL url=new URL(strings[0]);
            HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();
            if(urlConnection.getResponseCode()==200){
                inputStream=new BufferedInputStream(urlConnection.getInputStream());

            }
        }catch (IOException e){
            return null;
        }
        return inputStream;

    }

    @Override
    protected void onPostExecute(InputStream inputStream) {
        pdfView.fromStream(inputStream).load();
    }
}

}

как я могу исправить эту ошибку и просмотреть файлы в android ...

Debug Part When i click on a pdf from list view How List view is displaying

...