如何检索pdf文件firebase一次?

时间:2018-03-10 11:32:47

标签: android firebase firebase-storage offlineapps

我使用 Firebase 存储来存储我的 PDF 图书后,我使用Firebase存储中的下载链接将其加载到我的 PDFView 中byte []数组     它的工作正常,但我想在用户离线浏览后第一次加载它请帮我在哪里添加Firebase离线 我只需要检索一次这本书,所以用户只需要第一次上网 我也看到了文档在哪里放这个

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

这是我的活动.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();
    }

}
}

1 个答案:

答案 0 :(得分:0)

为了实现此目的,您需要下载.pdf文件并将其本地存储在用户设备上。这意味着即使没有互联网连接,用户也能够读取文件,因为用户可以从其设备打开文件。根据{{​​3}},您可以使用以下代码实现此目的:

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
    }
});

但请记住,每次打开应用程序时都要检查文件是否已存在并仅在文件不存在时才下载。