2013-04-12 1 views
1

Я пытаюсь отобразить два изображения с моего сервера. Как я мог это достичь?Как загрузить и просмотреть изображения в режиме просмотра изображений на Android?

Доступны любые варианты на Android для динамического изменения изображения с сервера для каждого экземпляра?

Я использую разрешение как ,.

<uses-permission android:name="android.permission.INTERNET" /> 
+4

См http://stackoverflow.com/questions/2471935/how-to-load-an-imageview-by-url-in-android – fiddler

+0

HTTP: // www.androidhive.info/2012/07/android-loading-image-from-url-http/ – Raghunandan

ответ

2

Попробуйте example. это поможет вам получить изображения fromonline

XML-файл Файл

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dip" 
    android:text="Loading image from url" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Button" /> 

<ImageView 
    android:id="@+id/image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dip" /> 

<ImageView 
    android:id="@+id/image1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dip" /> 

<ImageView 
    android:id="@+id/image2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dip" /> 

<ImageView 
    android:id="@+id/image3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dip" /> 
</LinearLayout> 

И ява файлы, ..

public class AndroidLoadImageFromURLActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Loader image - will be shown before loading image 
    final int loader = R.drawable.loader; 

    // Imageview to show 
    final ImageView image = (ImageView) findViewById(R.id.image); 
    final ImageView image1 = (ImageView) findViewById(R.id.image1); 
    final ImageView image2 = (ImageView) findViewById(R.id.image2); 
    final ImageView image3 = (ImageView) findViewById(R.id.image3); 
    Button b=(Button)findViewById(R.id.button1); 


    // Image url 
    final String image_url = "URL"; 
    final String image_url2 = "URL"; 
    final String image_url3 = "URL"; 
    final String image_url4 = "URL"; 

    // ImageLoader class instance 
    final ImageLoader imgLoader = new ImageLoader(getApplicationContext()); 

    // whenever you want to load an image from url 
    // call DisplayImage function 
    // url - image url to load 
    // loader - loader image, will be displayed before getting image 
    // image - ImageView 
    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


    imgLoader.DisplayImage(image_url, loader, image); 
    imgLoader.DisplayImage(image_url4, loader, image3); 
    imgLoader.DisplayImage(image_url2, loader, image1); 
    imgLoader.DisplayImage(image_url3, loader, image2); 
     } 
    }); 
} 
} 

public class FileCache { 

private File cacheDir; 

public FileCache(Context context){ 
    //Find the dir to save cached images 
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"TempImages"); 
    else 
     cacheDir=context.getCacheDir(); 
    if(!cacheDir.exists()) 
     cacheDir.mkdirs(); 
} 

public File getFile(String url){ 
    String filename=String.valueOf(url.hashCode()); 
    File f = new File(cacheDir, filename); 
    return f; 

} 

public void clear(){ 
    File[] files=cacheDir.listFiles(); 
    if(files==null) 
     return; 
    for(File f:files) 
     f.delete(); 
} 

} 

public class ImageLoader { 

MemoryCache memoryCache=new MemoryCache(); 
FileCache fileCache; 
private Map<ImageView, String> imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>()); 
ExecutorService executorService; 

public ImageLoader(Context context){ 
    fileCache=new FileCache(context); 
    executorService=Executors.newFixedThreadPool(5); 
} 

int stub_id = R.drawable.ic_launcher; 
public void DisplayImage(String url, int loader, ImageView imageView) 
{ 
    stub_id = loader; 
    imageViews.put(imageView, url); 
    Bitmap bitmap=memoryCache.get(url); 
    if(bitmap!=null) 
     imageView.setImageBitmap(bitmap); 
    else 
    { 
     queuePhoto(url, imageView); 
     imageView.setImageResource(loader); 
    } 
} 

private void queuePhoto(String url, ImageView imageView) 
{ 
    PhotoToLoad p=new PhotoToLoad(url, imageView); 
    executorService.submit(new PhotosLoader(p)); 
} 

private Bitmap getBitmap(String url) 
{ 
    File f=fileCache.getFile(url); 

    //from SD cache 
    Bitmap b = decodeFile(f); 
    if(b!=null) 
     return b; 

    //from web 
    try { 
     Bitmap bitmap=null; 
     URL imageUrl = new URL(url); 
     HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection(); 
     conn.setConnectTimeout(30000); 
     conn.setReadTimeout(30000); 
     conn.setInstanceFollowRedirects(true); 
     InputStream is=conn.getInputStream(); 
     OutputStream os = new FileOutputStream(f); 
     Utils.CopyStream(is, os); 
     os.close(); 
     bitmap = decodeFile(f); 
     return bitmap; 
    } catch (Exception ex){ 
     ex.printStackTrace(); 
     return null; 
    } 
} 

//decodes image and scales it to reduce memory consumption 
private Bitmap decodeFile(File f){ 
    try { 
     //decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

     //Find the correct scale value. It should be the power of 2. 
     final int REQUIRED_SIZE=70; 
     int width_tmp=o.outWidth, height_tmp=o.outHeight; 
     int scale=1; 
     while(true){ 
      if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE) 
       break; 
      width_tmp/=2; 
      height_tmp/=2; 
      scale*=2; 
     } 

     //decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize=scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } catch (FileNotFoundException e) {} 
    return null; 
} 

//Task for the queue 
private class PhotoToLoad 
{ 
    public String url; 
    public ImageView imageView; 
    public PhotoToLoad(String u, ImageView i){ 
     url=u; 
     imageView=i; 
    } 
} 

class PhotosLoader implements Runnable { 
    PhotoToLoad photoToLoad; 
    PhotosLoader(PhotoToLoad photoToLoad){ 
     this.photoToLoad=photoToLoad; 
    } 

    @Override 
    public void run() { 
     if(imageViewReused(photoToLoad)) 
      return; 
     Bitmap bmp=getBitmap(photoToLoad.url); 
     memoryCache.put(photoToLoad.url, bmp); 
     if(imageViewReused(photoToLoad)) 
      return; 
     BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad); 
     Activity a=(Activity)photoToLoad.imageView.getContext(); 
     a.runOnUiThread(bd); 
    } 
} 

boolean imageViewReused(PhotoToLoad photoToLoad){ 
    String tag=imageViews.get(photoToLoad.imageView); 
    if(tag==null || !tag.equals(photoToLoad.url)) 
     return true; 
    return false; 
} 

//Used to display bitmap in the UI thread 
class BitmapDisplayer implements Runnable 
{ 
    Bitmap bitmap; 
    PhotoToLoad photoToLoad; 
    public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;} 
    public void run() 
    { 
     if(imageViewReused(photoToLoad)) 
      return; 
     if(bitmap!=null) 
      photoToLoad.imageView.setImageBitmap(bitmap); 
     else 
      photoToLoad.imageView.setImageResource(stub_id); 
    } 
} 

public void clearCache() { 
    memoryCache.clear(); 
    fileCache.clear(); 
} 

} 

public class MemoryCache { 
private Map<String, SoftReference<Bitmap>> cache=Collections.synchronizedMap(new HashMap<String, SoftReference<Bitmap>>()); 

public Bitmap get(String id){ 
    if(!cache.containsKey(id)) 
     return null; 
    SoftReference<Bitmap> ref=cache.get(id); 
    return ref.get(); 
} 

public void put(String id, Bitmap bitmap){ 
    cache.put(id, new SoftReference<Bitmap>(bitmap)); 
} 

public void clear() { 
    cache.clear(); 
} 
} 


public class Utils { 
public static void CopyStream(InputStream is, OutputStream os) 
{ 
    final int buffer_size=1024; 
    try 
    { 
     byte[] bytes=new byte[buffer_size]; 
     for(;;) 
     { 
      int count=is.read(bytes, 0, buffer_size); 
      if(count==-1) 
       break; 
      os.write(bytes, 0, count); 
     } 
    } 
    catch(Exception ex){} 
} 
} 

И использовать Manifest.xml, как, ..

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.androidhive.imagefromurl" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="8" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".AndroidLoadImageFromURLActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

<!-- Internet Permissions --> 
<uses-permission android:name="android.permission.INTERNET" /> 

<!-- Permission to write to external storage --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

</manifest> 
1

Вы можете использовать следующий код для загрузки изображения из Интернета и отображения его на Android в ImageView. Я стараюсь это в моем приложении ..

public static void DownloadFile(String imageURL, String fileName) throws IOException { 
    URL url = new URL(imageURL); 
    File file = new File(fileName); 

    long startTime = System.currentTimeMillis(); 
    Log.d("DownloadFile", "Begin Download URL: " + url + " Filename: " + fileName); 
    URLConnection ucon = url.openConnection(); 
    InputStream is = ucon.getInputStream(); 
    BufferedInputStream bis = new BufferedInputStream(is); 
    ByteArrayBuffer baf = new ByteArrayBuffer(50); 
    int current = 0; 
    while ((current = bis.read()) != -1) 
     baf.append((byte) current); 
    FileOutputStream fos = new FileOutputStream(file); 
    fos.write(baf.toByteArray()); 
    fos.close(); 
    Log.d("DownloadFile", "File was downloaded in: " + ((System.currentTimeMillis() - startTime)/1000) + "s"); 
} 

[...] 

try { 
    String imagePath = getFilesDir() + "/" + "logo1w.png"; 
    DownloadFile("http://www.google.de/intl/en_com/images/srpr/logo1w.png", imagePath); 
} catch (IOException e) { 
    // Something went wrong here 
} 

ImageView1.setbMap(BitmapFactory.decodeFile(imagePath)); 
Смежные вопросы