我有一个问题。我不明白如何快速实现 pdf 查看。我使用 urlconnection 打开 pdf,但加载时间很长。我想进行缓存,以便在我重新查看 pdf 时,不会有下载。请告诉我如何做到这一点?如果有人能告诉我并告诉我如何做到这一点,我将不胜感激。
我的代码:
public class ViewPDFFiles extends AppCompatActivity {
PDFView pdfView;
ProgressBar pb;
SearchView searchView;
ArrayAdapter kek;
ListView myPDFListView;
DatabaseReference databaseReference;
StorageReference storageReference;
List<uploadPDF> uploadPDFS;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.viewallpdf_activity);
searchView = findViewById(R.id.name_input);
if(getResources().getBoolean(R.bool.portrait_only)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
int id = getResources().getIdentifier("android:id/search_src_text", null, null);
EditText searchEditText = (EditText) searchView.findViewById(id);
if (searchEditText != null) {
searchEditText.setGravity(Gravity.CENTER);
}
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
private boolean activityStartup = true;
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
if (activityStartup) {
searchView.clearFocus();
activityStartup = false;
}
}
}
});
searchView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setIconified(false);
}
});
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
kek = (ArrayAdapter) myPDFListView.getAdapter();
kek.getFilter().filter(s);
return false;
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(ViewPDFFiles.this);
builder.setCancelable(true);
builder.setTitle("Предупреждение!");
builder.setMessage("Файлы с темами могут открываться некоторое время и отображать пустой белый экран(10-30 секунд), не закрывайте страницу");
builder.setPositiveButton("Хорошо,я подожду",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.show();
storageReference = FirebaseStorage.getInstance().getReference();
myPDFListView = (ListView) findViewById(R.id.files_list);
uploadPDFS = new ArrayList<>();
viewAllFiles();
myPDFListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
setContentView(R.layout.viewfile_activity);
if(getResources().getBoolean(R.bool.portrait_only)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
pdfView=findViewById(R.id.pdfView);
uploadPDF uploadPDF = uploadPDFS.get(position);
new RetrievePDFStream().execute(uploadPDF.url);
}
});
}
class RetrievePDFStream extends AsyncTask<String,Void,InputStream> {
@Override
protected InputStream doInBackground(String... strings) {
InputStream inputStream = null;
try {
URL urlx = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection) urlx.openConnection();
if (urlConnection.getResponseCode() == 200) {
inputStream = new BufferedInputStream(urlConnection.getInputStream());
}
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
} catch (IOException e) {
return null;
}
return inputStream;
}
@Override
protected void onPostExecute(InputStream inputStream) {
pdfView.fromStream(inputStream)
.enableSwipe(true)
.load();
}
}
private void viewAllFiles() {
databaseReference = FirebaseDatabase.getInstance().getReference("uploads");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot postSnapshot : snapshot.getChildren()){
uploadPDF uploadPDF = postSnapshot.getValue(com.tokha.diplom.uploadPDF.class);
uploadPDFS.add(uploadPDF);
}
String[] uploads = new String[uploadPDFS.size()];
for(int i = 0;i<uploads.length;i++){
uploads[i] = uploadPDFS.get(i).getName();
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, uploads){
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView myText = (TextView) view.findViewById(android.R.id.text1);
myText.setTextColor(getResources().getColor(R.color.autorization));
return view;
}
};
myPDFListView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
public void goBack(View view) {
finish();
}
}