2012-03-15 3 views
2

Я делаю приложение, в котором я должен получить ответ от xml, и я получаю URL-адреса изображений. Теперь я хочу поместить изображения из URL-адресов в gridview, но я не знаю, как извлечь изображения из URL-адресов и положить в gridview.Any помощи будут appreciated.My код выглядит следующим образом:android: загрузить изображения с url и показать в gridview

public class GalleryNewActivity extends Activity { 

private ProgressDialog dialog; 
GridView ga; 
Element e; 
Node elem; 
public List<Drawable> pictures; 

ImageView imageView; 
static final String PREFS_NAME = "MyPrefs"; 
static final String USER_KEY = "user"; 
static final String Name = "name"; 


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

     if(isNetworkconn()){ 
     new GetSPCAsyncTask().execute(""); 
    }else{ 
     showDialogOnNoInternet(); 
    } 
    ga = (GridView)findViewById(R.id.Gallery01); 
    ga.setAdapter(new ImageAdapter(this)); 
    imageView = (ImageView)findViewById(R.id.ImageView01); 
    } 



public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

    public ImageAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return pictures.size(); 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

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

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v; 

     if (convertView == null) { // if it's not recycled, initialize some 
      // attributes 

      LayoutInflater li = getLayoutInflater(); 
      v = li.inflate(R.layout.galleryitem, null); 
      imageView = (ImageView)v.findViewById(R.id.thumbImage); 

      imageView.setLayoutParams(new GridView.LayoutParams(200, 250)); 

      // imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(2, 5, 2, 5); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageDrawable(pictures.get(position)); 
     imageView.setTag(pics[position]); 

     return imageView; 
    } 


private class GetPicsToNextPage extends AsyncTask<String, String, String>{ 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 

     dialog = ProgressDialog.show(GalleryNewActivity.this, "Please wait", "Loading..."); 

    } 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     String str = null; 
     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return str; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     dialog.dismiss(); 

     Intent intent = new Intent(getApplicationContext(), Flip3d.class); 
     startActivity(intent); 

    } 
} 

private boolean isNetworkconn(){ 
    ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) { 
     return true; 
    }else{ 
     return false; 
    } 
} 

private void showDialogOnNoInternet(){ 
    AlertDialog.Builder alt_bld = new AlertDialog.Builder(GalleryNewActivity.this); 
    alt_bld.setTitle("Error."); 
    alt_bld.setMessage("Your phone is not connected to internet."); 
    alt_bld.setCancelable(false); 
    alt_bld.setNeutralButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
      dialog.dismiss(); 
     } 
    }); 
    alt_bld.show(); 
} 


//loader for dynamic starts 
private class GetSPCAsyncTask extends AsyncTask<String, String, String>{ 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     dialog = ProgressDialog.show(GalleryNewActivity.this, "Please wait", "Loading..."); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 

     ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
     String xml = XMLfunctions.getXML(); 
     Document doc = XMLfunctions.XMLfromString(xml); 

     NodeList nodes = doc.getElementsByTagName("Image"); 

     for (int i = 0; i < nodes.getLength(); i++) {       
      HashMap<String, String> map = new HashMap<String, String>();  

      e = (Element)nodes.item(i); 

      //map.put("Image", XMLfunctions.getValue(e, "Image")); 

      map.put("ImagePath", "Naam:" + XMLfunctions.getValue(e, "ImagePath")); 


      map.put("ImageHeadline", "Headline: " + XMLfunctions.getValue(e, "ImageHeadline")); 
      System.out.println(map.put("ImageHeadline", "Headline: " + XMLfunctions.getValue(e, "ImageHeadline"))); 

      map.put("ImageDesc", "Desc: " + XMLfunctions.getValue(e, "ImageDesc")); 
      System.out.println(map.put("ImageDesc", "Desc: " + XMLfunctions.getValue(e, "ImageDesc"))); 

      mylist.add(map); 

      Drawable d=LoadImageFromWebOperations(); 
      pictures.add(d); 
     }  

    return xml;} 
    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     dialog.dismiss(); 

      } 
    private Drawable LoadImageFromWebOperations() 
    { 
     String path=XMLfunctions.getValue(e, "ImagePath"); 
      try{ 
      InputStream is = (InputStream) new URL(path).getContent(); 
      Drawable d = Drawable.createFromStream(is, "src name"); 
      Log.w("CREADO","CREADO"); 
      return d; 
     }catch (Exception e) { 
      System.out.println("Exc="+e); 
      return null; 
     } 
    } 
} 
} 
+1

Пожалуйста, отредактируйте ваш вопрос и удалите весь код, который не имеет отношения к вашему вопросу. Вам не нужно сбрасывать весь свой код в вопрос, когда вы спрашиваете только о 10 строках. –

ответ

9

Я хотел бы предложить вам проверить ниже решений для загрузки изображений из URL:

  1. Android - Universal Image loader by Nostra
  2. Lazy load of images in ListView

Результат вы можете получить если вы используете универсальный загрузчик изображений:

enter image description here

+2

Универсальный загрузчик изображений действительно решил мою проблему –

+1

@ user775 рад, что вы получили решение :) Привет! –

+0

Спасибо за помощь –

0

вызова этой функции URL вы получите вытяжку, а затем хранить это в пользовательский вводимом коэффициенте класса, а затем поместить в сетке Посмотреть. Функция вызова, как этого

ImageOperations (это, ImageUrl)

public Object fetch(String address) throws MalformedURLException, IOException { 

    URL url = new URL(address); 
    Object content = url.getContent(); 
    return content; 
} 

private Drawable ImageOperations(Context ctx, String url) { 

    try { 
     InputStream is = (InputStream) this.fetch(url); 
     Drawable d = Drawable.createFromStream(is, "src"); 
     return d; 
    } catch (MalformedURLException e) { 
     return null; 
    } catch (IOException e) { 
     return null; 
    } 
} 
+0

Не могли бы вы назвать elobrate, где писать код в моем коде и что делать дальше? –

+0

вызывать эту функцию после того, как вы получили изображение url's. –

+0

не работает –

0

https://github.com/koush/UrlImageViewHelper

UrlImageViewHelper заполнит ImageView с изображением, которое находится в URL.

Образец будет выполнять поиск изображений Google и загружать/показывать результаты асинхронно.

UrlImageViewHelper автоматически загружает, сохраняет и кэширует все изображения, обращаясь к BitmapDrawables. Дублирующие URL-адреса не будут загружаться в память дважды. Память растрового изображения управляется с использованием слабой справочной хеш-таблицы, поэтому, как только изображение больше не будет использоваться вами, это будет автоматически собираться мусором.

еще использовать это,

public static Bitmap loadBitmap(String url) { 
    Bitmap bitmap = null; 
    InputStream in = null; 
    BufferedOutputStream out = null; 

    try { 
     in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE); 

     final ByteArrayOutputStream dataStream = new ByteArrayOutputStream(); 
     out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE); 
     copy(in, out); 
     out.flush(); 

     final byte[] data = dataStream.toByteArray(); 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     //options.inSampleSize = 1; 

     bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options); 
    } catch (IOException e) { 
     Log.e(TAG, "Could not load Bitmap from: " + url); 
    } finally { 
     closeStream(in); 
     closeStream(out); 
    } 

    return bitmap; 
} 
Смежные вопросы