2016-10-30 4 views
0

Wie lade Bild von URL und speichern Sie diese auf Speicher des Geräts in Android? Sagen Sie mir nicht, dass ich Picasso oder Oerlaibrary benutze. Ich muss: Wenn Gerät Internet-Verbindung bekomme ich Image von der URL zu ImageView laden und auf Speicher des Geräts speichern, sonst muss ich eines der gespeicherten Bild zu ImageView laden. Danke für`s hilftBild von URL laden und auf Speicher in Android

P.S. Tut mir leid, ich kann einige Fehler machen, weil ich kein Englisch kann. Das ist meine Klasse:

public class ImageManager { 
    String file_path; 
    Bitmap bitmap = null; 
    public Bitmap donwoaledImageFromSD() { 

     File image = new File(Environment.getExternalStorageDirectory().getPath(),file_path); 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions); 

     return bitmap; 
    } 

    private void savebitmap() { 
     File file = new File("first"); 
     file_path = file.getAbsolutePath(); 
     try { 
      FileOutputStream fileOutputStream = new FileOutputStream(file); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 90,fileOutputStream); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void fetchImage(final String url, final ImageView iView) { 
     new AsyncTask<String, Void, Bitmap>() { 
      protected Bitmap doInBackground(String... iUrl) { 

       try { 
        InputStream in = new URL(url).openStream(); 
        bitmap = BitmapFactory.decodeStream(in); 
        savebitmap(); 

       } catch (Exception e) { 
        donwoaledImageFromSD(); 
       } 
       return bitmap; 
      } 

      protected void onPostExecute(Bitmap result) { 
       super.onPostExecute(result); 
       if (iView != null) { 
        iView.setImageBitmap(result); 
       } 
      } 
     }.execute(url); 
    } 
} 
+1

Y u dont zuverlässige Bibliotheken wie Glide verwenden , Picaso, etc –

+0

Es ist eines der Kriterien nicht verwenden Standart Laibrary (Glide, Picaso, etc) –

+0

Bitte bieten Sie eine [MCVE] demonstrieren, was Sie versucht haben und welche spezifischen Probleme, die Sie aufgetreten sind. – CommonsWare

Antwort

0

Versuchen Sie diesen Code zu verwenden:

Methode zum Laden Bild von imageUrl

public Bitmap getBitmapFromURL(String imageUrl) { 
     try { 
      URL url = new URL(imageUrl); 
      HttpURLConnection connection = (HttpURLConnection) 

    url.openConnection(); 
       connection.setDoInput(true); 
       connection.connect(); 
       InputStream inputStream = connection.getInputStream(); 
       Bitmap imageBitmap = BitmapFactory.decodeStream(inputStream); 
       return imageBitmap; 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return null; 
      } 
     } 

Und Sie sollten es in einem separaten Thread verwenden, wie folgt aus:

new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        Bitmap bitmap = getBitmapFromURL(<URL of your image>); 
        imageView.setImageBitmap(bitmap); 

       } catch (Exception e) { 

        e.printStackTrace(); 
        e.getMessage(); 
       } 

      } 
     }).start(); 

Aber mit Picasso - in der Tat ein besserer Weg.

Update:

Für Bitmap Speichern auf externen Speicher (SD-Karte) in Datei Sie Methode wie folgt verwenden können:

public static void writeBitmapToSD(String aFileName, Bitmap aBitmap) { 

      if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 
       return; 
      } 

      File sdPath = Environment.getExternalStorageDirectory(); 
      File sdFile = new File(sdPath, aFileName); 

      if (sdFile.exists()) { 
       sdFile.delete(); 
      } 

      try { 
       FileOutputStream out = new FileOutputStream(sdFile); 
       aBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
       out.flush(); 
       out.close(); 
      } catch (Exception e) { 

      } 

     } 

Denken Sie daran, dass Sie

brauchen
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

für es.

And for loading `Bitmap` from file on external storage You can use method like that: 

public static Bitmap loadImageFromSD(String aFileName) { 
     Bitmap result = null; 
     if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 
      try { 
       FileInputStream fis = new FileInputStream(new File(Environment.getExternalStorageDirectory(), aFileName)); 
       result = BitmapFactory.decodeStream(fis); 
       fis.close(); 
      } catch (FileNotFoundException e) { 
       Log.d(TAG, "loadImageFromSD: " + e.getMessage()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return result; 
    } 

Sie benötigen

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

dies zu tun.

Update 2

Methode getBitmapFromURL(), aber ImageView sollte von UI-Thread aktualisiert werden, so Sie getBitmapFromURL() nennen sollten, zum Beispiel so:

new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        final Bitmap bitmap = getBitmapFromURL("<your_image_URL>"); 

        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          imageView.setImageBitmap(bitmap); 
         } 
        }); 


       } catch (Exception e) { 

        e.printStackTrace(); 
        e.getMessage(); 
       } 

      } 
     }).start(); 
+0

Danke für die Antwort, aber ich muss Bitmap speichern und es in ImageView einfügen. Auch ich weiß, dass Picasso besser ist. Aber es ist eines der Kriterien nicht verwenden Standart laibrary (Glide, Picaso, etc) –

+0

Entschuldigung, aber Lade Bild von URL - arbeiten. –

+0

Bitte schauen Sie sich das Update 2 von answer an. –