2015-04-07 5 views
0

Я использую этот метод для получения изображений с URL-адреса, и я загружаю более одного изображения, а переменная под названием «имя» - это массив имен изображений. I want to иметь возможность хранить все изображения, имя которых находится в массиве, поэтому я сохранил URL-адрес, подобный this.it, похоже, работает хорошо, но у меня проблема с выбором только одного изображения или их.сохранить несколько изображений из url во внутреннюю память в android

это код для сохранения изображений

String fileName="code"; 

          try { 
           URL url = new URL("http://10.0.2.2/picure/"+name+".jpg"); 
           HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
           conn.setDoInput(true); 
           conn.connect(); 
           InputStream is = conn.getInputStream(); 
           Bitmap bm = BitmapFactory.decodeStream(is); 
           FileOutputStream fos = getActivity().openFileOutput(fileName, Context.MODE_PRIVATE); 

           ByteArrayOutputStream outstream = new ByteArrayOutputStream(); 

           bm.compress(Bitmap.CompressFormat.JPEG, 100, outstream); 
           byte[] byteArray = outstream.toByteArray(); 

           fos.write(byteArray); 
           fos.close(); 
           Toast.makeText(getActivity()," connected", Toast.LENGTH_LONG).show(); 
          } catch(Exception e) { 



      } 

это код для сбора изображений

Строка путь = mContext.getFilesDir() ToString(). Строка fileName = "code";

if (fileName != null && !fileName.equals("")) { 
     Bitmap bMap = BitmapFactory.decodeFile(path + "/" + fileName); 
     if (bMap != null) { 
      category_logo.setImageBitmap(bMap); 
     } 
    } 

я знаю имена образов я спасенных так как я выбираю, что один специфически

+0

«" name "- это массив имен". 'picture/"+ name +". jpg "'. Извините, я не верю в это. 'name' будет String. Массив не будет компилироваться. – greenapps

ответ

0

Для получения всех изображений используйте AsyncTask, этот код можно загрузить изображения в каталоге кэш-памяти приложения:

class ImageDownloader extends AsyncTask<String, Void, File> { 

      String imageurl; 
      String name; 
Context ctx; 

      public ImageDownloader(Context context, String url, String fileName) { 

       this.imageurl = url; 
       this.name = fileName; 
this.ctx = context; 


      } 
      @Override 
      protected File doInBackground(String... urls) { 

        Bitmap mIcon; 

        File cacheDir = ctx.getCacheDir(); 
        File f = new File(cacheDir, name); 

        try { 
         InputStream in = new java.net.URL(imageurl).openStream(); 
         mIcon = BitmapFactory.decodeStream(in); 

         try { 
          FileOutputStream out = new FileOutputStream(
            f); 
          mIcon.compress(
            Bitmap.CompressFormat.JPEG, 
            100, out); 
          out.flush(); 
          out.close(); 
          return f; 

         } catch (FileNotFoundException e) { 

          return null; 
         } catch (IOException e) { 

          return null; 
         } 

        } catch (Exception e) { 

         return null; 
        } 


      } 
      @Override 
      protected void onPostExecute(File result) { 

       super.onPostExecute(result); 
               Toast.makeText(ctx," connected " + name, Toast.LENGTH_LONG).show(); 

      } 


     } 
    } 

для звонка AsyncTask, вам нужно использовать FOR для получения всех имен и адрес изображения:

new ImageDownloader(getBaseContext(),url[i],name[i]).execute(); 

Вы можете отредактировать doInBackground с вашим кодом, но HTTPConnection, который вы используете, устарел в API 22, пожалуйста, используйте приведенный выше пример, вы можете изменить каталог.

И, извините за код, вы можете переформатировать позже.

+0

вы не понимаете мой вопрос, как я могу прочитать конкретное изображение – arinze

+0

Для чтения конкретное изображение, которое вы можете использовать Uri.fromFile (путь + "/" + имя_файла) – Santiago