# #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, необходимо загрузить, если вы хотите его просмотреть, но я ожидаю, что я хочу просмотреть его непосредственно в приложении, а не загружать его на телефон и просматривать.