Как отобразить pdf-файл в режиме просмотра pdf, который извлекается из firebase, вместо того, чтобы просто загружать pdf-файл в Android Studio?

# #android #firebase #pdf

Вопрос:

Я создаю приложение, которое позволяет пользователю загружать pdf-файл в firebase. Я могу успешно извлечь pdf-файл из firebase, но теперь я хочу, чтобы пользователь мог просматривать pdf-файл в приложении вместо загрузки pdf-файла.

Это java того, как я извлекаю pdf-файл из firebase:

 public class RetrievePDF extends AppCompatActivity {  ListView listView;  DatabaseReference databaseReference;  Listlt;putPDFgt; uploadedPDF;   @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_retrieve_pdf);   listView = findViewById(R.id.listView);  uploadedPDF= new ArrayListlt;gt;();    retrievePDFFiles();   listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  @Override  public void onItemClick(AdapterViewlt;?gt; parent, View view, int i, long l) {  putPDF putPDF = uploadedPDF.get(i);   Intent intent = new Intent(Intent.ACTION_VIEW);  intent.setType("application/pdf");  intent.setData(Uri.parse(putPDF.getUrl()));  startActivity(intent);  }  });    }   private void retrievePDFFiles() {   databaseReference= FirebaseDatabase.getInstance().getReference("uploadPDF");  databaseReference.addValueEventListener(new ValueEventListener() {  @Override  public void onDataChange(@NonNull DataSnapshot snapshot) {   for(DataSnapshot ds: snapshot.getChildren()){  putPDF putPDF= ds.getValue(com.example.uploadpdf.putPDF.class);  uploadedPDF.add(putPDF);   }   String[] uploadsName=new String[uploadedPDF.size()];   for(int i=0;ilt;uploadsName.length;i  ){  uploadsName[i]= uploadedPDF.get(i).getName();  }   ArrayAdapterlt;Stringgt; arrayAdapter=new ArrayAdapterlt;Stringgt;(getApplicationContext(),  android.R.layout.simple_list_item_1, uploadsName){   @NonNull  @Override  public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {   View view = super.getView(position, convertView, parent);   TextView textView=(TextView) view  .findViewById(android.R.id.text1);   textView.setTextColor(Color.BLACK);  textView.setTextSize(20);  return view;  }  };   listView.setAdapter(arrayAdapter);   }   @Override  public void onCancelled(@NonNull DatabaseError error) {   }  });  }  

Это мой XML — файл:

И я хочу, чтобы PDF отображался в виде изображения и текста 3 в 1 строке. Как я могу отобразить все PDF-файлы в виде, как в этом примере

 lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"  tools:context=".RetrievePDF"gt;  lt;!-- Header aligned to top --gt; lt;RelativeLayout  android:id="@ id/header"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_alignParentTop="true"  android:gravity="center"  gt;   lt;TextView  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_alignParentTop="true"  android:layout_alignParentEnd="true"  android:layout_marginStart="13dp"  android:layout_marginTop="24dp"  android:layout_marginEnd="22dp"  android:layout_marginBottom="5dp"  android:layout_toEndOf="@ id/imageView"  android:text="Header title"  android:textColor="#000"  android:textSize="25sp"  android:textStyle="bold" /gt;   lt;ImageView  android:id="@ id/imageView"  android:layout_width="114dp"  android:layout_height="99dp"  android:contentDescription="@string/app_name"  android:src="@drawable/ic_android_black_24dp" /gt;   lt;View  android:layout_width="wrap_content"  android:layout_height="3dp"  android:background="@color/teal_700"  tools:ignore="MissingConstraints"  tools:layout_editor_absoluteX="0dp"  tools:layout_editor_absoluteY="110dp"  android:layout_marginTop="105dp"/gt;   lt;/RelativeLayoutgt;  lt;!-- Footer aligned to bottom (Menu) --gt; lt;RelativeLayout  android:id="@ id/footer"  android:layout_width="match_parent"  android:layout_height="50dp"  android:layout_alignParentBottom="true"  android:background="@color/black"  android:gravity="center" gt;   lt;/RelativeLayoutgt;  lt;!-- Scrollable Item below header and above footer --gt;  lt;ScrollView  android:id="@ id/scrollableContents"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:layout_above="@id/footer"  android:layout_below="@id/header"  android:background="#fff"gt;   lt;LinearLayout  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:gravity="center_horizontal"  android:orientation="vertical"gt;   lt;ListView  android:id="@ id/listView"  android:layout_width="match_parent"  android:layout_height="575dp"  android:padding="7dp" /gt;   lt;/LinearLayoutgt;    lt;/ScrollViewgt;  lt;/RelativeLayoutgt;  

Я искал в некоторых обучающих видео и нашел этот код для pdfview:

 pdfview = findViewById(R.id.pdfview);  StorageReference storageRef;  FirebaseApp app;  FirebaseStorage storage;  storageRef = FirebaseStorage.getInstance().getReference();  app = FirebaseApp.getInstance();  storage = FirebaseStorage.getInstance(app);  storageRef = storage.getReference().child("uploadPDF");   storageRef.getStream().addOnSuccessListener(new OnSuccessListenerlt;StreamDownloadTask.TaskSnapshotgt;() {  @Override  public void onSuccess(StreamDownloadTask.TaskSnapshot taskSnapshot) {   pdfview.fromStream(taskSnapshot.getStream()).load();  }  }).addOnFailureListener(new OnFailureListener() {  @Override  public void onFailure(@NonNull Exception e) {  Toast.makeText(pdf.this, "Fail :" e.getMessage(), Toast.LENGTH_SHORT).show();  }  });  

Я не уверен, нужно ли мне открывать новое пустое действие для pdfview?

Я новичок в Android и был бы признателен, если бы кто-нибудь мог мне помочь.

Комментарии:

1. Если файл pdf находится на сервере, вам сначала нужно загрузить файл на свое устройство, прежде чем приложение сможет показать его пользователю. Непонятно, что вы имеете в виду.

2. Код не имеет проблем, текущий pdf-файл, полученный из firebase, необходимо загрузить, если вы хотите его просмотреть, но я ожидаю, что я хочу просмотреть его непосредственно в приложении, а не загружать его на телефон и просматривать.