我正在使用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();
}
}
}
2条答案
按热度按时间xriantvc1#
为了实现这一点,您需要下载
.pdf
文件并将其本地存储在用户设备上。这意味着即使没有Internet连接,用户也可以读取该文件,因为用户可以从其设备打开该文件。根据official documentation,您可以使用以下代码实现这一点:但请记住,每次你打开应用程序检查文件的existens和下载它只有当文件不存在.
uurv41yg2#
用布尔值替换byte []