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

android无法显示PDF(name.PDF格式无效),android,pdf,android-volley,Android,Pdf,Android Volley,我正在使用截击下载一个文件,但无法打开它,它显示如下: 无法显示PDF(name.PDF格式无效) 还要提到服务返回一个11kb字节[],在调试过程中,我收到一个16kb的响应。我使用的代码是: InputStreamVolleyRequest request = new InputStreamVolleyRequest(Request.Method.POST, uri, new Response.Listener<byte[]>() {

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

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

还要提到服务返回一个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);
InputStreamVolleyRequest请求=新的InputStreamVolleyRequest(request.Method.POST,uri,
新的Response.Listener(){
@凌驾
public void onResponse(字节[]响应){
试一试{
if(响应!=null){
if(Build.VERSION.SDK_INT>22){
requestPermissions(新字符串[]{“android.permission.WRITE_EXTERNAL_STORAGE”、“android.permission.READ_EXTERNAL_STORAGE”},1);
}
文件baseDir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载);
baseDir.mkdirs();
文件地毯a=新文件(baseDir+nombre_地毯a);
地毯a.mkdirs();
File File=新文件(baseDir,documento.nombrefichor.replace(“\\”,“/”);
试一试{
BufferedOutputStream bos=新的BufferedOutputStream(新文件输出流(文件));
写(应答);
bos.flush();
bos.close();
Log.d(“NEWFILE”,file.getAbsolutePath());
Toast.makeText(getActivity(),“Descarga completa.”,Toast.LENGTH_LONG.show();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}捕获(例外e){
Log.d(“KEY_错误”,“无法下载文件”);
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
错误。printStackTrace();
}
},(HashMap)参数);
RequestQueue MRRequestQueue=Volley.newRequestQueue(getActivity().getApplicationContext(),new HurlStack());
mRequestQueue.add(请求);

提前谢谢

这不是编程问题。我建议您在模拟器或设备中安装pdf阅读器()


如果您使用的是模拟器,则可能需要使用已安装Google Play的版本。然后您可以安装pdf阅读器。

最后,我将响应作为字符串发送,然后使用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();
            }
        }
    }
StringRequest sr=newstringrequest(Request.Method.POST,uri,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
试一试{
文件baseDir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载);
baseDir.mkdirs();
文件地毯a=新文件(baseDir+nombre_地毯a);
地毯a.mkdirs();
File File=新文件(baseDir,documento.nombrefichor.replace(“\\”,“/”);
BufferedOutputStream输出=新的BufferedOutputStream(新文件输出流(文件));
FileOutputStream fos=新的FileOutputStream(文件);
byte[]respuesta=android.util.Base64.decode(response.getBytes(),android.util.Base64.DEFAULT);
fos.write(respuesta);
fos.flush();
fos.close();
output.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

可能有用:@statosdotcom不太有用,但谢谢我上传到了硬盘,并试图打开它并下载到我的电脑上,但无法下载pdfread@Juan您是否检查了取回的内容?@mkl当服务发送字节[]时,我收到了base64。但在解码时出现问题(它被解码,但它在文件中写入了literla base64),所以现在我将其作为字符串UTF_8发送,并将其字节转换为字节[]。它可以很好地处理.txt文件。Thanks@Juan“因此,现在我将其作为字符串UTF_8发送,并将其字节转换为字节[]。它可以很好地处理.txt文件。”-好吧,这就解释了。以UTF-8编码字符串发送PDF很可能会损坏它。UTF-8是一种文本编码,因此它可以很好地处理.txt文件,但PDF是一种二进制格式,将二进制文件视为文本总是有很好的机会损坏二进制数据。感谢您的回答,最后我像我的回答一样解决了这个问题