Отображение растрового изображения с использованием пути к файлу - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть определенный набор URL-адресов изображений, которые мне нужно загрузить и сохранить во внутренней памяти.

Код для загрузки и сохранения изображения:

   public void callDownloadImageAsync(int pos) {
        String baseDir = this.getFilesDir().getAbsolutePath() + "/";
        if (allImagesArr.size() > pos) {
            try {
                int count;
                String imageUrl = allImagesArr.get(pos);

                URL url = new URL(imageUrl);
                Utility.printMessage("imageUrl..." + imageUrl);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setReadTimeout(60000);
                connection.setConnectTimeout(60000);
                connection.setDoOutput(true);
                connection.setRequestMethod("GET");
                if (Utility.getToken(this).length() > 0) {
                    Utility.printMessage("@@@ my header for photos " + Utility.getToken(this));
                    try {
                        connection.setRequestProperty("X-CSRF-TOKEN", Utility.getToken(this));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                connection.connect();
                String PATH;
                File imgFile;

//                if (allImagesFileNameArr.get(pos).startsWith("lead_")) {
                if (allImagesFileNameArr.get(pos).startsWith("/")) {
                    imgFile = new File(allImagesFileNameArr.get(pos));
                    PATH = imgFile.getAbsolutePath();
                } else {
                    File folder = new File(baseDir + allImagesFileNameArr.get(pos)).getParentFile();
                    if (!folder.exists())
                        folder.mkdirs();
                    String imageName = allImagesFileNameArr.get(pos);
                    imageName = imageName.substring(imageName.lastIndexOf("/"));

                    imgFile = new File(folder, imageName);
                    PATH = imgFile.getAbsolutePath();
                }

//                }

                InputStream input = new BufferedInputStream(url.openStream());
                OutputStream output = new FileOutputStream(PATH);
                byte data[] = new byte[1024];
                long total = 0;
                while ((count = input.read(data)) != -1) {
                    total += count;
                    //                    publishProgress ((int)(total*100/lenghtOfFile));
                    output.write(data, 0, count);
                }
//                Bitmap bitmap = BitmapFactory.decodeStream(input);
//                Utility.saveToInternalStorage(context, bitmap, PATH);

                output.flush();
                output.close();
                input.close();

                Utility.printMessage("image saved...");
            } catch (IOException e) {
                e.printStackTrace();
                Utility.logException(e);
            }

            callDownloadImageAsync(pos + 1);
        }
    }

Я получаю изображение "messege"сохранено "в журнале.Но когда я пытаюсь прочитать растровое изображение, используя путь, я получаю следующее исключение:

java.lang.IllegalArgumentException: File /data/user/0/com.app.los_pdapp/files/lead_1/PRAPPL_profile.jpg contains a path separator
04-25 14:28:43.024 21208-21208/com.app.los_pdapp W/System.err:     at android.app.ContextImpl.makeFilename(ContextImpl.java:2413)
04-25 14:28:43.024 21208-21208/com.app.los_pdapp W/System.err:     at android.app.ContextImpl.openFileInput(ContextImpl.java:504)
04-25 14:28:43.024 21208-21208/com.app.los_pdapp W/System.err:     at android.content.ContextWrapper.openFileInput(ContextWrapper.java:193)
04-25 14:28:43.024 21208-21208/com.app.los_pdapp W/System.err:     at com.app.los_pdapp.Util.Utility.readBitmap(Utility.java:977)
04-25 14:28:43.024 21208-21208/com.app.los_pdapp W/System.err:     at com.app.los_pdapp.Fragments.PD.Applicant.DetailView.bindView(DetailView.java:154)
04-25 14:28:43.024 21208-21208/com.app.los_pdapp W/System.err:     at com.app.los_pdapp.Fragments.PD.Applicant.DetailView.onViewCreated(DetailView.java:65)
04-25 14:28:43.024 21208-21208/com.app.los_pdapp W/System.err:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1314)

Мой метод чтения растрового изображения:

public static Bitmap readBitmap(Context context, String name) {

        Utility.printMessage("name of file..."+name);


        String name1 = name.substring(name.lastIndexOf("/")+1);
        Utility.printMessage("name of file..."+name1);
        Bitmap b = BitmapFactory.decodeFile(name);
        Utility.printMessage("*************** : " + b);
        if (b != null)
            return b;
        try {
            FileInputStream fis = context.openFileInput(name);
//            FileOutputStream fos = new FileOutputStream(name);
            b = BitmapFactory.decodeStream(fis);
            fis.close();
            return b;
        } catch (Exception e) {
            e.printStackTrace();
            Utility.logException(e);
        }
        return null;
    }

Я пытался использовать URL-соединениепоток и декодирование растрового изображения, но это решение не работает.Следовательно, любой может предложить, что не так в приведенном выше коде?

1 Ответ

0 голосов
/ 25 апреля 2018

context.openFileInput(name); не принимает пути, только имена файлов.Используйте FileInputStream fis = context.openFileInput(new File(name).getName()) вместо

...