android 如何检索pdf文件firebase一次?

polkgigr  于 2023-03-16  发布在  Android
关注(0)|答案(2)|浏览(175)

我正在使用Firebase存储来存储我的 PDF 书籍,在我使用下载链接从Firebase存储将其加载到我的 PDFView 中之后,使用byte[]数组,它工作正常,但我只想在用户将离线浏览它之后第一次加载它,请帮助我在哪里添加Firebase离线我只需要检索一次该书籍,因此用户将只需要第一次使用Internet
我还看到了文档,在哪里把这个

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

这是我的activity .java,它工作得很好,把我一直在等待检索我的书,每次请帮助我

package com.xxxx.xxxxx;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ProgressBar;

import com.github.barteksc.pdfviewer.PDFView;
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;

import org.apache.commons.io.IOUtils;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

public class ReadActivity extends AppCompatActivity {
 PDFView pdf;
 String url;
 DatabaseReference mData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read);
        pdf=findViewById(R.id.pdfView);
url="https://firebasestorage.googleapis.com/v0/b/programminglib-978cc.appspot.com/o/JavaScriptEnlightenment-arabic-17.01-itwadi.com.pdf?alt=media&token=aa160de7-8cfa-4ec1-813f-0d67e2d8f307";
        new RetrievePDFbyte()
                .execute(url);


    }

class RetrievePDFbyte extends AsyncTask<String,Void,byte[]>{
    ProgressDialog progressDialog;
    protected void onPreExecute()
    {
        progressDialog = new ProgressDialog(ReadActivity.this);
        progressDialog.setTitle("getting the book content...");
        progressDialog.setMessage("Please wait...");
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.show();

    }

    @Override
    protected byte [] doInBackground(String... strings) {
        InputStream inputStream = null;
        try{
            URL url=new URL(strings[0]);
            HttpsURLConnection httpsURLConnection=(HttpsURLConnection)url.openConnection();
            if (httpsURLConnection.getResponseCode()==200){
                inputStream=new BufferedInputStream(httpsURLConnection.getInputStream());
            }
        }catch (IOException e){
            return null;
        }
        try {
            return IOUtils.toByteArray(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  null;
    }

    @Override
    protected void onPostExecute(byte[] bytes) {
        pdf.fromBytes(bytes).load();
        progressDialog.dismiss();
    }

}
}
xriantvc

xriantvc1#

为了实现这一点,您需要下载.pdf文件并将其本地存储在用户设备上。这意味着即使没有Internet连接,用户也可以读取该文件,因为用户可以从其设备打开该文件。根据official documentation,您可以使用以下代码实现这一点:

islandRef = storageRef.child("images/island.jpg");

File localFile = File.createTempFile("images", "jpg");

islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
        // Local temp file has been created
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle any errors
    }
});

但请记住,每次你打开应用程序检查文件的existens和下载它只有当文件不存在.

uurv41yg

uurv41yg2#

用布尔值替换byte []

protected byte [] doInBackground(String... strings)
 
 replacing 
 
  protected Boolean doInBackground(String... strings) {

相关问题