Android-我从服务器获取Json响应为PDF(或)JPG(或)PNG文件.如何处理视图(或)按用户下载

我在用

http连接方法:获取

请求/响应:JSON

我有一些带有ID的记录(参见下图).用户单击记录时.我正在使用单击的记录ID向服务器调用HttpConnection(JSON请求).

Json请求网址:http://xyz.in/api/mobile/document/12345/{record Id}

我从服务器获取Json Response作为PDF(或)JPG(或)PNG的地方.

Json回应:

%PDF-1.5

%����

1 0 obj

<</Type/Catalog/Pages 2 0 R/Lang(en-US) /StructTreeRoot 51 0 R/MarkInfo<</Marked true>>>>

endobj

2 0 obj

<</Type/Pages/Count 11/Kids[ 3 0 R 10 0 R 18 0 R 21 0 R 24 0 R 27 0 R 30 0 R 33 0 R 36 0 R 39 0 R 47 0 R] >>

endobj

3 0 obj

<</Type/Page/Parent 2 0 R/Resources<</ExtGState<</GS5 5 0 R/GS6 6 0 R>>/Font<</F1 7 0 R>>/XObject<</Image9 9 0 R>>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 960 540] /Contents 4 0 R/Group<</Type/Group/S/Transparency/CS/DeviceRGB>>/Tabs/S/StructParents 0>>

endobj

4 0 obj

<</Filter/FlateDecode/Length 340>>

stream

x���Mk1����9�
fg&������ҥ=��U)T����MV[?.�fC��ɛY(��j���nC�ׅ)P!"1���!X���J�؀������S
���at����5�����.���$Tl)��˸6�����J��u:j�{µyGa�4�iuW�Gj0I?�U��u
�S��k4Z��N�7�T�T�Y��)�QY�b&�@��l��Ͼsr�{��R��?Cu+E�����g���9|�(͊Ϣ��r�­�)�e��5���R�N䬳q��oϥ�m6ټ����<��<47�=��sH�?��e�v��+����K�.���|ZBo��߶�

endstream

endobj

如果我在Android Webview中加载该URL(http://xyz.in/api/mobile/document/12345/ {记录ID}),那么响应是PDF,我可以查看它.但回应是JPG或PNG.它无法在Webview中查看.

如何处理它以供Android用户查看(或)下载.

提前致谢.

Android-我从服务器获取Json响应为PDF(或)JPG(或)PNG文件.如何处理视图(或)按用户下载

解决方法:

//Calling the Download file (Asynctask class). 
new DownloadFileFromURL().execute(DownloadFileUrl);



//Progress dialog for download url
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case progress_bar_type: // we set this to 0
                pDialog = new ProgressDialog(this);
                pDialog.setMessage("Downloading file. Please wait...");
                pDialog.setIndeterminate(false);
                pDialog.setMax(100);
                pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                pDialog.setCancelable(true);
                pDialog.show();
                return pDialog;
            default:
                return null;
        }
    }

    /**
     * Background Async Task to download file
     */
    class DownloadFileFromURL extends AsyncTask<String, String, String> {
        String filename="";
        /**
         * Before starting background thread
         * Show Progress Bar Dialog
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(progress_bar_type);
        }

        /**
         * Downloading file in background thread
         */
        @Override
        protected String doInBackground(String... f_url) {
            int count;
            try {
                URL url = new URL(f_url[0]);
                URLConnection conection = url.openConnection();
                conection.connect();
                // this will be useful so that you can show a tipical 0-100% progress bar
                int lenghtOfFile = conection.getContentLength();
                String depo = conection.getHeaderField("Content-Disposition");
                String depoSplit[] = depo.split("filename=");
                filename = depoSplit[1].replace("filename=", "").replace("\"", "").trim();
                Log.v("","fileName"+filename);

                // download the file
                InputStream input = new BufferedInputStream(url.openStream(), 8192);

                // Output stream
                OutputStream output = new FileOutputStream("/sdcard/"+filename);

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    // publishing the progress....
                    // After this onProgressUpdate will be called
                    publishProgress("" + (int) ((total * 100) / lenghtOfFile));

                    // writing data to file
                    output.write(data, 0, count);
                }

                // flushing output
                output.flush();

                // closing streams
                output.close();
                input.close();

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
            }

            return null;
        }

        /**
         * Updating progress bar
         */
        protected void onProgressUpdate(String... progress) {
            // setting progress percentage
            pDialog.setProgress(Integer.parseInt(progress[0]));
        }

        /**
         * After completing background task
         * Dismiss the progress dialog
         **/
        @Override
        protected void onPostExecute(String file_url) {
            // dismiss the dialog after the file was downloaded
            dismissDialog(progress_bar_type);

            // Reading filepath from sdcard
            String FilePath = Environment.getExternalStorageDirectory().toString() + "/"+filename;

            Log.v("FilePath", "" + FilePath);
        }

    }
上一篇:RSA签名问题


下一篇:Http调用第三方接口数据传输的两种方式