2012-10-08 2 views
1

Этот проект, который я сделал с изображением в моем drawable, но теперь я хочу получить URL-адрес изображения от JSON с помощью Asynctask и отобразить его. и я делаю php, которые предоставляют строку json, как показано ниже.Gridview получить изображение от JSON с помощью AsyncTask

Я хочу получить путь к изображению (url), используя AsyncTask от JSON. Я хочу использовать данные из JSON вместо public mThumbId = {...};

{"count":"28","data": 
    [{"id":"1", 
     "first_name":"man", 
     "last_name":"woman", 
     "username":"man", 
     "password":"4f70432e636970de9929bcc6f1b72412", 
     "email":"[email protected]", 
     "url":"http://vulcan.wr.usgs.gov/Imgs/Jpg/MSH/Images/MSH64_aerial_view_st_helens_from_NE_09-64_med.jpg"}, 
    {"id":"2", 
      "first_name":"first", 
      "last_name":"Last Name", 
      "username":"user", 
      "password":"1a1dc91c907325c69271ddf0c944bc72", 
      "email":"[email protected]", 
      "url":"http://www.danheller.com/images/California/Marin/Scenics/bird-view-big.jpg"}, 
    {"id":"3", 
      "first_name":"first", 
      "last_name":"Last Name", 
      "username":"user", 
      "password":"1a1dc91c907325c69271ddf0c944bc72", 
      "email":"0", 
      "url":"http://www.hermes.net.au/bodhi/images/view/large/view_03.jpg"}]} 

AndroidGridLayoutActivity

GridView gridView = (GridView) findViewById(R.id.grid_view);   
    gridView.setAdapter(new ImageAdapter(this)); 

    gridView.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
       int position, long id) { 

      Intent i = new Intent(getApplicationContext(), FullImageActivity.class); 
      i.putExtra("id", position); 
      startActivity(i); 
     } 
    }); 

ImageAdapter

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 

// Keep all Images in array 
public Integer[] mThumbIds = { 
     R.drawable.pic_1, R.drawable.pic_2, 
     R.drawable.pic_3, R.drawable.pic_4, 
     R.drawable.pic_5, R.drawable.pic_6, 
     R.drawable.pic_7, R.drawable.pic_8, 
     R.drawable.pic_9, R.drawable.pic_10, 
     R.drawable.pic_11, R.drawable.pic_12, 
     R.drawable.pic_13, R.drawable.pic_14, 
     R.drawable.pic_15 
}; 

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

public int getCount() { 
    return mThumbIds.length; 
} 

public Object getItem(int position) { 
    return mThumbIds[position]; 
} 

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

public View getView(int position, View convertView, ViewGroup parent) {   
    ImageView imageView = new ImageView(mContext); 
    imageView.setImageResource(mThumbIds[position]); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
    return imageView; 
} 

} 

FullImageActivity

Intent i = getIntent(); 
    int position = i.getExtras().getInt("id"); 
    ImageAdapter imageAdapter = new ImageAdapter(this); 

    ImageView imageView = (ImageView) findViewById(R.id.full_image_view); 
    imageView.setImageResource(imageAdapter.mThumbIds[position]); 
+0

Я не хочу использовать 'public mThumbId = {...};'. Я хочу использовать url от json. – kongkea

+0

да? и так, что вы пробовали? – njzk2

+0

http://www.androidhive.info/2012/02/android-gridview-layout-tutorial/ эта ссылка является учебным gridview получить изображение из drawable, но я хочу получить изображение от json выше, но в версии 4.0.3 не удалось позволяют получать изображение из Интернета в основной поток, это позволяет в фоновом режиме. поэтому мы должны использовать AsyncTask, и я не использую AsyncTask. Я хочу использовать метод, который получает путь к изображению в json, например 'public Integer [] mThumbId = {...};' – kongkea

ответ

0

Я думаю, что это просто ссылка будет полностью ответить на ваш вопрос:

https://github.com/novoda/ImageLoader

и моя собственная реализация:

https://github.com/iRail/BeTrains-for-Android/blob/master/src/tof/cv/mpp/adapter/TweetItemAdapter.java

EDIT

Что вам действительно нужно сделать:

1) Па rse JSON: в Интернете есть тысячи обучающих программ, или используйте потрясающую библиотеку GSON.

2) После анализа JSON вы получите массив объектов.

3) В вашем адаптере вам может понадобиться расширить ArrayAdapter.

4) в методе GetView(), анализировать мои 2 выше ссылки и использовать что-то вроде:

imageLoader.DisplayImage(tweet.profile_image_url, activity, holder.image);

+0

это не то, что я говорю – kongkea

+0

, но и спасибо – kongkea

+0

Вы спросили, как создать AsyncTask для отображения изображений из фида JSON в gridView.Я ответил вам, как создать AsyncTask для отображения изображений из канала JSON в ListView. Может быть, вы могли бы улучшить свой вопрос, чтобы я мог понять, чего вы хотите? –

0

Вы должны сначала извлечь адреса из JSON в массив, а затем использовать ниже кода загружать изображение в виде растрового изображения динамически, используя задачу Async.

Bitmap bm[]=new Bitmap[3]; 
ImageAdapter img; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     bm[0]=null; 
     bm[1]=null; 
     bm[2]=null; 


InputStream is= getDataFromServer(); 
     String asd=getResponseFromStream(is); 
     try { 
     JSONObject jsn=new JSONObject(asd); 
     JSONArray jd=jsn.getJSONArray("data"); 
     for(int i=0;i<jd.length();i++) 
     { 
      JSONObject j_object=jd.getJSONObject(i); 
      String url=j_object.getString("url"); 
      urls.add(url); 
     } 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


     img=new ImageAdapter(this); 
     GridView gridView = (GridView) findViewById(R.id.grid_view);   
     gridView.setAdapter(img); 
     new ImageDownloader().execute(); 
     gridView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 

       Intent i = new Intent(getApplicationContext(), FullImageActivity.class); 
       i.putExtra("id", position); 
       startActivity(i); 
      } 
     }); 

    } 
    ProgressDialog prg; 
    private class ImageDownloader extends AsyncTask<Integer, Integer, String> 
    { 
     @Override 
     public void onPreExecute() 
     { 
      prg=ProgressDialog.show(LazyLoadActivity.this, null, 
        "Loading..."); 
     } 

     protected void onPostExecute(String result) 
     { 
      prg.hide(); 




     } 
      protected void onProgressUpdate(Integer... progress) { 
       img.notifyDataSetChanged(); 
      } 
     protected String doInBackground(Integer... a) 
     { 
      for(int i=0;i<3;i++) 
      { 
       bm[i]=downloadBitmap(urls[i]); 
       this.publishProgress(i); 
      } 
      return ""; 
     } 
    } 
    public Integer[] mThumbIds = { 
      R.drawable.ic_launcher, R.drawable.ic_launcher, 
      R.drawable.ic_launcher 
    }; 

    public class ImageAdapter extends BaseAdapter { 
     private Context mContext; 

     // Keep all Images in array 

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

     public int getCount() { 
      return mThumbIds.length; 
     } 

     public Object getItem(int position) { 
      return mThumbIds[position]; 
     } 

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

     public View getView(int position, View convertView, ViewGroup parent) {   
      ImageView imageView = new ImageView(mContext); 
      if(bm[position]==null) 
      imageView.setImageResource(mThumbIds[position]); 
      else 
       imageView.setImageBitmap(bm[position]); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
      return imageView; 
     } 

     } 
Bitmap downloadBitmap(String url) { 

     final HttpClient client = new DefaultHttpClient(); 
     final HttpGet getRequest = new HttpGet(url); 

     try { 
      HttpResponse response = client.execute(getRequest); 
      final int statusCode = response.getStatusLine().getStatusCode(); 
      if (statusCode != HttpStatus.SC_OK) { 
       Log.w("ImageDownloader", "Error " + statusCode + " while retrieving bitmap from " + url); 
       return null; 
      } 

      final HttpEntity entity = response.getEntity(); 
      if (entity != null) { 
       InputStream inputStream = null; 
       try { 
        inputStream = entity.getContent(); 
        Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
        return bitmap; 
       } finally { 
        if (inputStream != null) { 
         inputStream.close(); 
        } 
        entity.consumeContent(); 
       } 
      } 
     } catch (Exception e) { 
      // Could provide a more explicit error message for IOException or IllegalStateException 
      getRequest.abort(); 
      Log.e("ImageDownloader", "Error while retrieving bitmap from " + url); 
     } finally { 
      if (client != null) { 
       //client. 
      } 
     } 
     return null; 
    } 
+0

'String urls [] = {... } 'Это статично. Я не хочу вводить его снова и снова. Я хочу запросить изображение пути из json выше. также спасибо – kongkea

+0

http://stackoverflow.com/questions/12739824/image-viewer-get-image-from-url-that-provide-image-path-as-json-string – kongkea

+0

Проделали некоторые изменения в ответе. пожалуйста, проверьте – Maneesh

Смежные вопросы