如何使用 urlconnection 缓存打开 pdf 文件

问题描述 投票:0回答:0

我有一个问题。我不明白如何快速实现 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();
    }



}


java android httpurlconnection
© www.soinside.com 2019 - 2024. All rights reserved.