android无法显示PDF(name.pdf格式无效)

标签 android pdf android-volley

我正在使用 volley 下载一个文件,但我无法打开它,它显示:

cannot display PDF (name.pdf is of invalid format)

还提到该服务返回一个 11kb 字节 [] 和调试,我收到一个 16kb 的响应。我使用的代码是:

InputStreamVolleyRequest request = new InputStreamVolleyRequest(Request.Method.POST, uri,
            new Response.Listener<byte[]>() {
                @Override
                public void onResponse(byte[] response) {                        
                    try {
                        if (response!=null) {

                            if(Build.VERSION.SDK_INT>22){
                                requestPermissions(new String[] {"android.permission.WRITE_EXTERNAL_STORAGE","android.permission.READ_EXTERNAL_STORAGE"}, 1);
                            }

                            File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
                            baseDir.mkdirs();
                            File carpeta = new File(baseDir + nombre_carpeta);
                            carpeta.mkdirs();
                            File file = new File(baseDir, documento.NombreFichero.replace("\\","/"));
                            try {
                                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
                                bos.write(response);
                                bos.flush();
                                bos.close();
                                Log.d("NEWFILE", file.getAbsolutePath());
                                Toast.makeText(getActivity(), "Descarga completa.", Toast.LENGTH_LONG).show();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }

                        }
                    } catch (Exception e) {
                        Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE");
                        e.printStackTrace();
                    }
                }
            } ,new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    }, (HashMap<String, String>) params);

    RequestQueue mRequestQueue = Volley.newRequestQueue(getActivity().getApplicationContext(), new HurlStack());
    mRequestQueue.add(request);

提前致谢!

最佳答案

最后,我将响应作为字符串发送,然后使用 android.util.Base64 对其进行解码。这是代码:

StringRequest sr = new StringRequest(Request.Method.POST, uri, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try{
                File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
                baseDir.mkdirs();
                File carpeta = new File(baseDir + nombre_carpeta);
                carpeta.mkdirs();
                File file = new File(baseDir, documento.NombreFichero.replace("\\","/"));
                BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file));

                FileOutputStream fos = new FileOutputStream(file);

                byte[] respuesta = android.util.Base64.decode(response.getBytes(), android.util.Base64.DEFAULT);

                fos.write(respuesta);

                fos.flush();

                fos.close();
                output.close();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }

关于android无法显示PDF(name.pdf格式无效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50684775/

相关文章:

pdf - ColdFusion CFPDFFORM 不会填充 PDF 表单字段

android - LayoutInflater 修复 RecyclerView 是正确的解决方案吗?

android - Android 中的共享首选项?

php - 存储 JSON 的多个结果

Android:防止屏幕方向改变但仍会收到通知

c# - 在浏览器中打开 PDF 文件而不是下载 pdf 文件

pdf - 在 postscript 和 pdfmaker 末尾带有两个超链接的简单行

java - 无法从后端获得对我的查询的响应。我该如何解决这个问题?

Android Volley 库 : do we always have to repeat Response. Listener 和 Response.ErrorListener

java - 如何检测蓝牙耳机上的按钮按下情况