¿Cómo recuperar un archivo PDF de Firebase Realtime Database en Android?

Cuando estamos creando una aplicación de Android, en lugar de insertar un pdf manualmente, queremos obtener el pdf usando Internet desde firebase. Firebase Realtime Database Firebase Crearemos nuestro depósito de almacenamiento y podemos insertar nuestro pdf allí y obtenerlo directamente en nuestra aplicación.

¿Qué vamos a construir en este artículo?

Vamos a crear dos actividades en este proyecto. En una actividad habrá un solo botón y en otra actividad, estamos viendo el archivo pdf. Entonces, cuando el usuario haga clic en el botón, se mostrará un cuadro de alerta con las opciones » Descargar «, » Ver » y » Cancelar «. Así el usuario elegirá si quiere Ver o Descargar el pdf.

Implementación paso a paso

Paso 1: crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: conecta tu aplicación a Firebase

Después de crear un nuevo proyecto, vaya a la opción Herramientas en la barra superior. Dentro de eso, haga clic en Firebase. Después de hacer clic en Firebase, puede ver la columna de la derecha que se menciona a continuación en la captura de pantalla.  

Dentro de esa columna, navegue hasta Firebase Realtime Database. Haga clic en esa opción y verá dos opciones en Conectar la aplicación a Firebase y Agregar Firebase Realtime Database a su aplicación. Haga clic en Conectar ahora y su aplicación se conectará a Firebase. Después de eso, haga clic en la segunda opción y ahora su aplicación está conectada a Firebase. 

construir.gradle

implementación ‘com.google.firebase:firebase-database:19.6.0’

Si la dependencia anterior no se agrega en su sección de dependencias. Agregue esta dependencia y sincronice su proyecto. Ahora nos moveremos hacia la parte XML de nuestra aplicación. Además, agregue la siguiente dependencia.

implementación ‘com.github.barteksc:android-pdf-viewer:2.8.2’

Ahora sincronice el proyecto desde la opción de la esquina superior derecha de Sincronizar ahora .

Paso 3: Agregar permiso de Internet en el archivo AndroidManifest.xml

Navegue hasta el archivo AndroidManifest.xml y agregue el siguiente permiso para obtener permiso de Internet en la aplicación.

<usos-permiso android:name=”android.permission.INTERNET”/>

<usos-permiso android:name=”android.permission.READ_EXTERNAL_STORAGE” />

<usos-permiso android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />

Paso 4: trabajar con el archivo activity_main.xml

Vaya al archivo activity_main.xml y consulte el siguiente código. A continuación se muestra el código para el archivo activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">
  
    <!--We will click on it to view pdf-->
    <Button
        android:id="@+id/view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@color/black"
        android:padding="10dp"
        android:text="Click here to View pdf "
        android:textSize="10dp" />
      
</LinearLayout>

Paso 5: trabajar con el archivo MainActivity.java

Vaya al archivo MainActivity.java y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
  
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
  
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
  
public class MainActivity extends AppCompatActivity {
  
    Button view;
    DatabaseReference database;
    String message;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = findViewById(R.id.view);
          
        // Initialising the reference to database
        database = FirebaseDatabase.getInstance().getReference().child("pdf");
        database.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                // getting a DataSnapshot for the location at the specified
                // relative path and getting in the link variable
                message = dataSnapshot.getValue(String.class);
            }
  
            // this will called when any problem
            // occurs in getting data
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                // we are showing that error message in toast
                Toast.makeText(MainActivity.this, "Error Loading Pdf", Toast.LENGTH_SHORT).show();
            }
        });
        // After clicking here alert box will come
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                CharSequence options[] = new CharSequence[]{
                        "Download",
                        "View",
                        "Cancel"
                };
                AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                builder.setTitle("Choose One");
                builder.setItems(options, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // we will be downloading the pdf
                        if (which == 0) {
                            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(message));
                            startActivity(intent);
                        }
                        // We will view the pdf
                        if (which == 1) {
                            Intent intent = new Intent(v.getContext(), ViewPdfActivity.class);
                            intent.putExtra("url", message);
                            startActivity(intent);
                        }
                    }
                });
                builder.show();
            }
        });
    }
}

Paso 6: Cree una nueva clase ViewpdfActivity

Consulte la actividad ViewpdfActivity . Esta actividad se utiliza para ver el archivo pdf. 

Paso 7: trabajar con el archivo activity_view_pdf.xml

aplicación > res > diseño > actividad_view_pdf.xml actividad_view_pdf.xml

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ViewPdfActivity">
  
    <com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/abc"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
      
</LinearLayout>

Paso 8: trabajar con el archivo ViewpdfActivity.java

Vaya al archivo ViewpdfActivity.java y consulte el siguiente código. A continuación se muestra el código para el archivo ViewpdfActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import androidx.appcompat.app.AppCompatActivity;
  
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
  
import com.github.barteksc.pdfviewer.PDFView;
  
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
  
public class ViewPdfActivity extends AppCompatActivity {
  
    String urls;
    PDFView pdfView;
    ProgressDialog dialog;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pdf);
        pdfView = findViewById(R.id.abc);
          
        // Firstly we are showing the progress 
        // dialog when we are loading the pdf
        dialog = new ProgressDialog(this);
        dialog.setMessage("Loading..");
        dialog.show();
          
        // getting url of pdf using getItentExtra
        urls = getIntent().getStringExtra("url");
        new RetrivePdfStream().execute(urls);
    }
  
    // Retrieving the pdf file using url
    class RetrivePdfStream extends AsyncTask<String, Void, InputStream> {
  
        @Override
        protected InputStream doInBackground(String... strings) {
            InputStream inputStream = null;
            try {
                  
                // adding url
                URL url = new URL(strings[0]);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                  
                // if url connection response code is 200 means ok the execute
                if (urlConnection.getResponseCode() == 200) {
                    inputStream = new BufferedInputStream(urlConnection.getInputStream());
                }
            }
            // if error return null
            catch (IOException e) {
                return null;
            }
            return inputStream;
        }
  
        @Override
        // Here load the pdf and dismiss the dialog box
        protected void onPostExecute(InputStream inputStream) {
            pdfView.fromStream(inputStream).load();
            dialog.dismiss();
        }
    }
}

Paso 9: agregar pdf en el almacenamiento de base de fuego y copiar el enlace de ese pdf

En firebase, vaya a la opción Almacenamiento y luego haga clic en el botón   Comenzar

Después de eso, haga clic en la opción Cargar archivo para insertar un pdf en el almacenamiento de firebase .  

Después de eso, haga clic en el pdf que insertó, luego los detalles del pdf vienen en la sección derecha, luego haga clic en el token de acceso y copie la URL del pdf.

Paso 10: agregue esa URL de pdf a la base de datos en tiempo real  

Vaya a la opción de base de datos en tiempo real y luego agregue estos valores a la base de datos. Dentro de esa pantalla, haga clic en Base de datos en tiempo real en la ventana izquierda.  

Después de hacer clic en esta opción, verá la pantalla en el lado derecho. En esta página, haga clic en la opción Reglas que se encuentra en la barra superior. Verá la siguiente pantalla. 

la

Producción:

Publicación traducida automáticamente

Artículo escrito por annianni y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *