2012-08-14 15 views
5

Chciałbym stworzyć galerię zdjęć, które uzyskać zdjęcia z url..this jest mój kod, ale nie działa ...Galeria zdjęć z adresu URL w Androidzie?

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)); 

    } 
} 

Błąd jest to, że nie mogę używać imageView.setImageResource (imageIDs [position]); na struny ... proszę o mrowisko?

+1

Trzeba uzyskać obraz z adresu URL, a następnie ustawić obraz jako 'ImageResource'? – Doomsknight

+0

Nie można uzyskać obrazu z adresu URL również – Kumar

+0

Zobacz odpowiedzi. Obie działają. – Doomsknight

Odpowiedz

9

musisz dekodowania obrazu z linku na przykład

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

Aktualizacja:

I zmodyfikowany kod, możesz spróbuj z tym,

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

Hmm nasze odpowiedzi wyglądają identicle! +1 – Doomsknight

+0

@Doomsknight: yep: P – Aerrow

+0

Out put pochodził tylko z tego tekstu (obrazy z San Francisco) – Kumar

5

W metodzie getView:

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

Ale błąd nadchodzi – Kumar

+0

Pytanie o surround za pomocą polecenia try/catch – Kumar

+0

Następnie otoczyj klauzulę try i catch. :) Zobacz modyfikację kodu Aerrows, która obejmuje to. – Doomsknight

Powiązane problemy