2012-08-14 41 views
5

我想创建一个图片库是获取图片从url..this是我的代码,但没有工作...来自android中的url的图库图像?

public class ImagesActivity extends Activity 
{  

private String[] imageIDs= {"http://lh5.ggpht.com/_mrb7w4gF8Ds/TCpetKSqM1I/AAAAAAAAD2c/Qef6Gsqf12Y/s144-c/_DSC4374%20copy.jpg", 
"http://lh5.ggpht.com/_Z6tbBnE-swM/TB0CryLkiLI/AAAAAAAAVSo/n6B78hsDUz4/s144-c/_DSC3454.jpg", 
"http://lh3.ggpht.com/_GEnSvSHk4iE/TDSfmyCfn0I/AAAAAAAAF8Y/cqmhEoxbwys/s144-c/_MG_3675.jpg", 
"http://lh6.ggpht.com/_Nsxc889y6hY/TBp7jfx-cgI/AAAAAAAAHAg/Rr7jX44r2Gc/s144-c/IMGP9775a.jpg" 
}; 

@Override  
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.displayview); 

    Gallery gallery = (Gallery) findViewById(R.id.gallery1); 

    gallery.setAdapter(new ImageAdapter(this));   
    gallery.setOnItemClickListener(new OnItemClickListener() 
    { 
     public void onItemClick(AdapterView parent, View v, int position, long id) 
     {     
//        Toast.makeText(getBaseContext(), "pic" + (position + 1) + " selected", Toast.LENGTH_SHORT).show(); 
          //---display the images selected--- 
          ImageView imageView = (ImageView) findViewById(R.id.image1);     
          imageView.setImageResource(imageIDs[position]); 
     } 
    }); 

} 


public class ImageAdapter extends BaseAdapter 
{ 
    private Context context; 
    private int itemBackground; 

    public ImageAdapter(Context c) 
    { 
     context = c; 
     //---setting the style--- 
     TypedArray a = obtainStyledAttributes(R.styleable.Gallery1); 
     itemBackground = a.getResourceId(
      R.styleable.Gallery1_android_galleryItemBackground, 0); 
     a.recycle();      
    } 

    //---returns the number of images--- 
    public int getCount() { 
     return imageIDs.length; 
    } 

    //---returns the ID of an item--- 
    public Object getItem(int position) { 
     return position; 
    }    

    public long getItemId(int position) { 
     return position; 
    } 

    //---returns an ImageView view--- 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView = new ImageView(context); 
     imageView.setImageResource(imageIDs[position]); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
     imageView.setLayoutParams(new Gallery.LayoutParams(150, 120)); 
     imageView.setBackgroundResource(itemBackground); 
     return imageView; 
    } 
}  

} 

ViewsActivity.java

public class ViewsActivity extends Activity 
{ 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
//  setContentView(R.layout.main); 

    startActivity(new Intent(this, ImagesActivity.class)); 

    } 
} 

的错误是,我不能使用imageView.setImageResource(imageIDs [位置]);为字符串...蚂蚁请帮忙?

+1

你需要从URL中的图像,然后将图像作为了'ImageResource'? – Doomsknight 2012-08-14 11:15:55

+0

未从URL获取图片也 – Kumar 2012-08-14 11:20:49

+0

查看答案。两者都有效。 – Doomsknight 2012-08-14 11:21:46

回答

9

您需要将图像从链接,例如解码,

URL url = new URL("load your URL"); 
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
img_downloaded.setImageBitmap(bmp); 

更新:

我修改你的代码,您可能试试这个,

public class MainActivity extends Activity { 

    private String[] imageIDs = { 
      "http://lh5.ggpht.com/_mrb7w4gF8Ds/TCpetKSqM1I/AAAAAAAAD2c/Qef6Gsqf12Y/s144-c/_DSC4374%20copy.jpg", 
      "http://lh5.ggpht.com/_Z6tbBnE-swM/TB0CryLkiLI/AAAAAAAAVSo/n6B78hsDUz4/s144-c/_DSC3454.jpg", 
      "http://lh3.ggpht.com/_GEnSvSHk4iE/TDSfmyCfn0I/AAAAAAAAF8Y/cqmhEoxbwys/s144-c/_MG_3675.jpg", 
      "http://lh6.ggpht.com/_Nsxc889y6hY/TBp7jfx-cgI/AAAAAAAAHAg/Rr7jX44r2Gc/s144-c/IMGP9775a.jpg" }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Gallery gallery = (Gallery) findViewById(R.id.gallery1); 

     gallery.setAdapter(new ImageAdapter(this)); 
     gallery.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView parent, View v, int position, 
        long id) { 
       // Toast.makeText(getBaseContext(), "pic" + (position + 1) + 
       // " selected", Toast.LENGTH_SHORT).show(); 
       // ---display the images selected--- 
       ImageView imageView = (ImageView) findViewById(R.id.imageview1); 
       URL url = null; 
       try { 
        url = new URL(imageIDs[position]); 
        Bitmap bmp = null; 
        try { 
         bmp = BitmapFactory.decodeStream(url 
           .openConnection().getInputStream()); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        imageView.setImageBitmap(bmp); 
       } catch (MalformedURLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     }); 

    } 

    public class ImageAdapter extends BaseAdapter { 
     private Context context; 
     private int itemBackground; 

     public ImageAdapter(Context c) { 
      context = c; 
      // ---setting the style--- 
      TypedArray a = obtainStyledAttributes(R.styleable.Gallery1); 
      itemBackground = a.getResourceId(
      R.styleable.Gallery1_android_galleryItemBackground, 0); 
      a.recycle(); 
     } 

     // ---returns the number of images--- 
     public int getCount() { 
      return imageIDs.length; 
     } 

     // ---returns the ID of an item--- 
     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     // ---returns an ImageView view--- 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imageView = new ImageView(context); 
      // imageView.setImageResource(imageIDs[position]); 
      URL url; 
      try { 
       url = new URL(imageIDs[position]); 
       Bitmap bmp = BitmapFactory.decodeStream(url.openConnection() 
         .getInputStream()); 
       imageView.setImageBitmap(bmp); 
       imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
       imageView.setLayoutParams(new Gallery.LayoutParams(150, 120)); 
       imageView.setBackgroundResource(itemBackground); 

      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return imageView; 
     } 
    } 

} 

使用activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Gallery 
     android:id="@+id/gallery1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <ImageView 
     android:id="@+id/imageview1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/gallery1" /> 


</RelativeLayout> 
+0

嗯,我们的答案看起来很标致! +1 – Doomsknight 2012-08-14 11:20:34

+0

@Doomsknight:是的:P – Aerrow 2012-08-14 11:21:45

+0

输出只有这个文本(旧金山的图像) – Kumar 2012-08-14 11:43:16

5

在getView方法:

URL newurl = new URL(imageIDs[position]); //Your URL String. 
Bitmap image = BitmapFactory.decodeStream(newurl.openConnection().getInputStream()); 
imageView.setImageBitmap(image); 
+0

但是出错了 – Kumar 2012-08-14 11:32:28

+0

用try/catch询问环绕 – Kumar 2012-08-14 11:34:07

+0

然后用try和catch子句包围它。 :)请参阅Aerrows修改您的代码,其中包括此。 – Doomsknight 2012-08-14 12:08:30