Кэшаванне малюнкаў і адлюстраванне

Добры дзень Am сутыкаецца пэўную праблему, у якой мне трэба загружаць выявы і адлюстроўваць іх на ListView , які адпавядае іх канкрэтнай TextView ў . Код у мяне ёсць паспяхова адлюстроўваючы The TextView ў Мне трэба паказваць, але я не ведаю, як адлюстраваць усе гэтыя розныя малюнкі побач з маім выглядам тэксту ў маім ListView .

Прайшоўшы праз мноства патокаў у SO. Лепшыя адказы вырашыць гэтую праблему шляхам 1. Спіс Гультай 2. Універсальны пагрузчык Выява

Я прайшоў праз абодва рашэнні. Запампаваў Гультай Спіс кодаў, у якіх URL з'яўляюцца жорстка закадаваныя радкі, якія захоўваюцца ў масіве. Тое, што я хацеў бы зрабіць, гэта стварыць свае ўласныя Струны дынамічна. Захоўвайце іх на кэш і адлюстроўваць ўсе адпаведныя выявы.

Вось мой код:

public class Tools_ListItemActivity extends ListActivity 
{
    private Context context;
    String s;

    private static final String TAG_POSTS = "posts";
    private static final String TAG_MDNAME = "mdname";
    private static final String TAG_UTCOST = "utcost";
    private static final String TAG_IIMG= "iimg";
    JSONArray posts = null;

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

        setContentView(R.layout.main);
        s=getIntent().getExtras().getString("url");
        new ProgressTask(Tools_ListItemActivity.this).execute();
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
       //TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
    }

ArrayList> jsonlist = new ArrayList>();

     ListView lv ;



      private class ProgressTask extends AsyncTask {
      private ProgressDialog dialog;

       public ProgressTask(ListActivity activity) {

       Log.i("1", "Called");
       context = activity;
       dialog = new ProgressDialog(context);
      }

       /** progress dialog to show user that the backup is processing. */

       /** application context. */
      private Context context;

       protected void onPreExecute() {
       this.dialog.setMessage("Progress start");
       this.dialog.show();
      }

       @Override
      protected void onPostExecute(final Boolean success) {
       if (dialog.isShowing()) {
        dialog.dismiss();
       }
       ListAdapter adapter = new SimpleAdapter(context, jsonlist,
         R.layout.activity_toolsitem, new String[] { TAG_IIMG, TAG_MDNAME, TAG_UTCOST  }, new int[] {
           R.id.imageViewUrl, R.id.mdname, R.id.utcost });

        setListAdapter(adapter);

       //selecting single ListView item
        lv = getListView();

      }

       protected Boolean doInBackground(final String... args) {

        JSONParser jParser = new JSONParser();

       //getting JSON string from URL
        JSONObject json = jParser.getJSONFromUrl(s);


        try {
            posts = json.getJSONArray(TAG_POSTS);
        } catch (JSONException e1) {
           //TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try
        {
       //looping through All Contacts
        for(int i = 0; i < posts.length(); i++){
            JSONObject c = posts.getJSONObject(i);

           //Storing each json item in variable
            String mdname = c.getString(TAG_MDNAME);
            String utcost= c.getString(TAG_UTCOST);
            String iimg=c.getString(TAG_IIMG);

            //Forming the Url of the image to be shown in the list view
            String imageUrl="My_App_URL"+iimg;

/*  try {

              String imageUrl="My_App_URL"+iimg;
              ImageView imageView = (ImageView)findViewById(R.id.imageViewUrl);
              Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageUrl).getContent());
              imageView.setImageBitmap(bitmap); 
            } catch (MalformedURLException e) {
              e.printStackTrace();
            } catch (IOException e) {
              e.printStackTrace();
            } */


           //creating new HashMap
            HashMap map = new HashMap();

           //adding each child node to HashMap key => value
            map.put(TAG_MDNAME, mdname);
            map.put(TAG_UTCOST, utcost);
            map.put(TAG_IIMG, iimg);



         jsonlist.add(map);
        } }catch (JSONException e) 
        {
        //TODO Auto-generated catch block
         e.printStackTrace();
        }


        return null;


       }

      }





}

Тут я адладжаная і высветлілі, што ImageUrl атрымлівае правільную форму. <�Код> Json вяртае толькі імя JPG таму я дадаць, што да URL і захоўваць яго ў ImageUrl . Два іншых TextViews становяцца правільна апрацоўваюцца і адлюстроўваюцца. Калі які-небудзь адзін можа дапамагчы мне ў адлюстраванні выявы ў акне прагляду малюнка таксама, то было б выдатна. Дзякуючы.

Update: I was able to solve my particular problem with the help of the link shared by Pankaj(https://github.com/AndroidBegin/Android-JSON-Parse-Images-and-Texts-Tutorial) and the concept knowledge shared by Raghunandan down below. Please go through these answers for a detailed explanation as well as implementation of Lazy loading. My apologies for not being able to reward an answer with bounty as i was away for two days.

16
@ D'yerMak'er Палепшыць хуткасць ACCEPTENCE вы павінны прыняць Raghunandan адказ ніжэй, гэта тое, што вам трэба. Акрамя таго, не марнуйце ур шчадротаў яны заслугоўваюць.
дададзена аўтар Prateek, крыніца
@ D'yerMak'er Палепшыць хуткасць ACCEPTENCE вы павінны прыняць Raghunandan адказ ніжэй, гэта тое, што вам трэба. Акрамя таго, не марнуйце ур шчадротаў яны заслугоўваюць.
дададзена аўтар Prateek, крыніца
дададзена аўтар Raghunandan, крыніца
дададзена аўтар Raghunandan, крыніца
@Rarw: Raghunandan і адказы панкаў разам дапамаглі мне вырашыць маю праблему. дынамічнае фарміраванне URL-адрасы была праблемай падчас сінтаксічнага аналізу JSON
дададзена аўтар D'yer Mak'er, крыніца
@Rarw: Raghunandan і адказы панкаў разам дапамаглі мне вырашыць маю праблему. дынамічнае фарміраванне URL-адрасы была праблемай падчас сінтаксічнага аналізу JSON
дададзена аўтар D'yer Mak'er, крыніца
я не ведаю, як выкарыстоўваць гэта ў маім канкрэтным выпадку. Калі і можа. Калі ласка, падзяліцеся рашэннем з выкарыстаннем гэтага метаду.
дададзена аўтар D'yer Mak'er, крыніца
@prateek: я не праверыў адказы, прыведзеныя ніжэй яшчэ. будзе правяраць іх першымі. , Безумоўна, прысудзіць ўзнагароду, калі я знайсці тое, што я шукаю. і так, я буду рабіць гэта да часу вычарпаюцца. Не хвалюйцеся.
дададзена аўтар D'yer Mak'er, крыніца
я не ведаю, як выкарыстоўваць гэта ў маім канкрэтным выпадку. Калі і можа. Калі ласка, падзяліцеся рашэннем з выкарыстаннем гэтага метаду.
дададзена аўтар D'yer Mak'er, крыніца
@prateek: я не праверыў адказы, прыведзеныя ніжэй яшчэ. будзе правяраць іх першымі. , Безумоўна, прысудзіць ўзнагароду, калі я знайсці тое, што я шукаю. і так, я буду рабіць гэта да часу вычарпаюцца. Не хвалюйцеся.
дададзена аўтар D'yer Mak'er, крыніца
У чым праблема з універсальным пагрузчыкам малюнка яго рабочым для мяне ў такім жа сітуацыях
дададзена аўтар OMAK, крыніца
У чым праблема з універсальным пагрузчыкам малюнка яго рабочым для мяне ў такім жа сітуацыях
дададзена аўтар OMAK, крыніца
Я не ведаю, што любы з гэтых адказаў лепш, чым іншыя. Яны будуць усё працаваць. Проста розныя спосабы зрабіць тое ж самае. Калі ў вас ёсць больш канкрэтнае пытанне з вашым кодам, а не лепшым спосабам, як правіла, можа быць, мы можам дапамагчы.
дададзена аўтар Rarw, крыніца
Я не ведаю, што любы з гэтых адказаў лепш, чым іншыя. Яны будуць усё працаваць. Проста розныя спосабы зрабіць тое ж самае. Калі ў вас ёсць больш канкрэтнае пытанне з вашым кодам, а не лепшым спосабам, як правіла, можа быць, мы можам дапамагчы.
дададзена аўтар Rarw, крыніца

9 адказы

Гультаяватая загрузка з дапамогай універсальнай Imageloader. Замяніць жорстка прапісаныя URLs з URL малюнкаў.

Зменіце ніжэй у адпаведнасці з вашымі патрабаваннямі

What's LazyList?. Check this link for details.

MainActivity.java

public class MainActivity extends Activity {

  private String[] mStrings={
            "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png",
            "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg",
            "http://a1.twimg.com/profile_images/97470808/icon_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook.png",
            "http://a3.twimg.com/profile_images/768060227/ap4u_normal.jpg",
            "http://a1.twimg.com/profile_images/74724754/android_logo_normal.png",
            "http://a3.twimg.com/profile_images/681537837/SmallAvatarx150_normal.png",
            "http://a1.twimg.com/profile_images/63737974/2008-11-06_1637_normal.png",
            "http://a3.twimg.com/profile_images/548410609/icon_8_73.png",
            "http://a1.twimg.com/profile_images/612232882/nexusoneavatar_normal.jpg",
            "http://a1.twimg.com/profile_images/213722080/Bugdroid-phone_normal.png",
            "http://a1.twimg.com/profile_images/645523828/OT_icon_090918_android_normal.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon_normal.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg",
            "http://a1.twimg.com/profile_images/97470808/icon_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon_normal.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet.png",
            "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter_normal.png",
            "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg",
            "http://a1.twimg.com/profile_images/97470808/icon.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook_normal.png",
            "http://a3.twimg.com/profile_images/768060227/ap4u_normal.jpg",
            "http://a1.twimg.com/profile_images/74724754/android_logo.png",
            "http://a3.twimg.com/profile_images/681537837/SmallAvatarx150_normal.png",
            "http://a1.twimg.com/profile_images/63737974/2008-11-06_1637_normal.png",
            "http://a3.twimg.com/profile_images/548410609/icon_8_73_normal.png",
            "http://a1.twimg.com/profile_images/612232882/nexusoneavatar_normal.jpg",
            "http://a1.twimg.com/profile_images/213722080/Bugdroid-phone_normal.png",
            "http://a1.twimg.com/profile_images/645523828/OT_icon_090918_android.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf.jpg",
            "http://a1.twimg.com/profile_images/97470808/icon_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon_normal.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png"
    };

    ListView lv;    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv= (ListView) findViewById(R.id.lv);
        lv.setAdapter(new LazyAdapter(this,mStrings));
    }
}

activity_main.xml


    

LazyAdapter.java

public class LazyAdapter extends BaseAdapter {
    private Activity activity;
    private String data[];
    private LayoutInflater inflater=null;
    public ImageLoader imageLoader; 
    DisplayImageOptions options;
    public LazyAdapter(Activity a, String[] d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        File cacheDir = StorageUtils.getOwnCacheDirectory(a, "MyFolderCache");

       //Get singletone instance of ImageLoader
        imageLoader = ImageLoader.getInstance();
       //Create configuration for ImageLoader (all options are optional)
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
             //You can pass your own memory cache implementation
             .discCacheExtraOptions(1024, 1024, CompressFormat.PNG, 100)
             .discCache(new UnlimitedDiscCache(cacheDir))//You can pass your own disc cache implementation
             .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
             .enableLogging()
             .build();
       //Initialize ImageLoader with created configuration. Do it once.
        imageLoader.init(config);
        //imageLoader.init(ImageLoaderConfiguration.createDefault(a));
       //imageLoader=new ImageLoader(activity.getApplicationContext());
        options = new DisplayImageOptions.Builder()
             .showStubImage(R.drawable.ic_launcher)
             .cacheInMemory()
             .cacheOnDisc()
             .displayer(new RoundedBitmapDisplayer(20))
             .build();
    }

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

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        ViewHolder vh = new ViewHolder();;
        if(convertView==null)
        {

            vi = inflater.inflate(R.layout.row, null);   
            vh.iv=(ImageView)vi.findViewById(R.id.ivv); 
            vh.pb= (ProgressBar)vi.findViewById(R.id.pb); 
            vh.tv = (TextView) vi.findViewById(R.id.textView1);
            vh.tv1= (TextView) vi.findViewById(R.id.textView2);
        }
        vh.tv.setText("Image in postion =");
        vh.tv1.setText(""+position);
        display(vh.iv, data[position], vh.pb);
        //imageLoader.displayImage(data.get(position).toString(), image,options);
        return vi;
    }

    public void display(ImageView img, String url, final ProgressBar spinner)
    {
        imageLoader.displayImage(url, img, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                spinner.setVisibility(View.VISIBLE);
            }
            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                spinner.setVisibility(View.GONE);
            }
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            spinner.setVisibility(View.GONE);
            }
            @Override
            public void onLoadingCancelled(String imageUri, View view) {

            }
        });
    }

    public static class ViewHolder
    {
        ImageView iv;
        TextView tv,tv1;
        ProgressBar pb;
    }
}

row.xml

<?xml version="1.0" encoding="utf-8"?>

    
    
    
    

Дадаць дазвол у маніфесце

 

enter image description here

17
дададзена
@DurgeshKumar так, вы можаце выкарыстоўваць Picasso або слізгаеце і выкарыстоўваць пераўтварэнне, калі гэта неабходна
дададзена аўтар Raghunandan, крыніца
@ D'yerMak'er вам трэба разабраць JSON і захоўваць яго ў спіс і даць URL у карыстацкім адаптары. яго просты, але вам трэба змяніць тое ж самае. вышэйпаказаныя працы ў абодвух жорстка і URL-адрасоў, якія вы атрымаеце ад разбору JSON. я адчуў, як і выкарыстоўваць тое ж самае ў маім дадатку
дададзена аўтар Raghunandan, крыніца
@Rarw, калі б гэта было так, я думаю, ён бы не запытаўся, так ці інакш
дададзена аўтар Raghunandan, крыніца
@ D'yerMak'er добра я пакідаю гэта вам вырашаць, які адказ дапамог найбольш. але я магу сказаць, што вышэй працуе выдатна. усё, што вам трэба зрабіць, гэта даць URLs AFER разборы JSON.
дададзена аўтар Raghunandan, крыніца
@DurgeshKumar я не універсальны пагрузчык малюнка на працягу доўгага часу. Я выкарыстоўваю слізгаценне або Picasso. Калі ласка, праверце іх дакументацыю. Калі вы не можаце стварыць свой уласны кэш і атрымаць шлях малюнка, а затым павялічыць малюнак, выкарыстоўваючы матрыцу. Акрамя таго, калі ў вас ужо ёсьць вобраз я не думаю, што любы малюнак загрузнік загрузіць малюнак зноў. Усё, што вам трэба зрабіць, гэта маштабаваць малюнак
дададзена аўтар Raghunandan, крыніца
@Raghunandan: на другім думаў, ваш адказ больш поўны для людзей, хто можа хацець рашэнне гэта ў будучыні, так што прыняў ваш адказ. Вялікі дзякуй за адказ. гэта выдатна дапамагло.
дададзена аўтар D'yer Mak'er, крыніца
@Raghunandan: ды гэта робіць. і так, цяпер я зрабіў тое ж самае, выкарыстоўваючы адказ вы падзяліліся і па гэтай спасылцы ( github.com/AndroidBegin/… ) Панкай сумесна. дзякуй за абмен падрабязнага рашэння, а таксама абмен ведаў канцэпцыі адкладзенай загрузкі.
дададзена аўтар D'yer Mak'er, крыніца
@Raghunandan: прабачэнні за позні адказ. Маё пытанне было, як я меў справу з многімі URL-адрасы радкоў, якія паступаюць ад сервера ў фармаце JSON. Я павінен быў сфармаваць гэтыя URLо, а затым працягнуць з задачай запампоўкі. рашэнне, якое вы далі выдатна працуе для закадаваныя радкоў URL-адрасоў. але не так у маім выпадку. пасля спробы высветліць розныя спосабы я адказваў на гэтае пытанне. Цяпер рашэнне было прапанавана Панкадж Шарма ўніз дапамог мне ў фарміраванні майго адказу. таму я збіраюся прыняць, што ў якасці адказу. але дзякуй за тлумачэнне канцэпцыі лянівым спісу і класаў, неабходных, каб зрабіць лянівы спіс работ. вялікі дзякуй.
дададзена аўтар D'yer Mak'er, крыніца
як наконт калі малюнка знаходзяцца ў тэчцы прылады лакальна?
дададзена аўтар ralphgabb, крыніца
Ну, калі малюнак ўжо загружана ў ListView тады як адзін змогуць павялічыць гэты вобраз? Што будзе поўны URL, якія захоўваюцца ў сістэме? Я не хачу, каб паўторна спампаваць гэты малюнак з Інтэрнэту, каб павялічыць у наступнай дзейнасці?
дададзена аўтар Durgesh Kumar, крыніца
Я выкарыстаў Picasso, і яна працавала добра гэта значыць `Picasso.with (CTX) .load (малюнак) .Поставить() у ((ImageView) малюнкі);`.
дададзена аўтар Durgesh Kumar, крыніца

Гультаяватая загрузка з дапамогай універсальнай Imageloader. Замяніць жорстка прапісаныя URLs з URL малюнкаў.

Зменіце ніжэй у адпаведнасці з вашымі патрабаваннямі

What's LazyList?. Check this link for details.

MainActivity.java

public class MainActivity extends Activity {

  private String[] mStrings={
            "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png",
            "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg",
            "http://a1.twimg.com/profile_images/97470808/icon_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook.png",
            "http://a3.twimg.com/profile_images/768060227/ap4u_normal.jpg",
            "http://a1.twimg.com/profile_images/74724754/android_logo_normal.png",
            "http://a3.twimg.com/profile_images/681537837/SmallAvatarx150_normal.png",
            "http://a1.twimg.com/profile_images/63737974/2008-11-06_1637_normal.png",
            "http://a3.twimg.com/profile_images/548410609/icon_8_73.png",
            "http://a1.twimg.com/profile_images/612232882/nexusoneavatar_normal.jpg",
            "http://a1.twimg.com/profile_images/213722080/Bugdroid-phone_normal.png",
            "http://a1.twimg.com/profile_images/645523828/OT_icon_090918_android_normal.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon_normal.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg",
            "http://a1.twimg.com/profile_images/97470808/icon_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon_normal.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet.png",
            "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter_normal.png",
            "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg",
            "http://a1.twimg.com/profile_images/97470808/icon.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook_normal.png",
            "http://a3.twimg.com/profile_images/768060227/ap4u_normal.jpg",
            "http://a1.twimg.com/profile_images/74724754/android_logo.png",
            "http://a3.twimg.com/profile_images/681537837/SmallAvatarx150_normal.png",
            "http://a1.twimg.com/profile_images/63737974/2008-11-06_1637_normal.png",
            "http://a3.twimg.com/profile_images/548410609/icon_8_73_normal.png",
            "http://a1.twimg.com/profile_images/612232882/nexusoneavatar_normal.jpg",
            "http://a1.twimg.com/profile_images/213722080/Bugdroid-phone_normal.png",
            "http://a1.twimg.com/profile_images/645523828/OT_icon_090918_android.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto_normal.jpg",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/605536070/twitterProfilePhoto.jpg",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf.jpg",
            "http://a1.twimg.com/profile_images/97470808/icon_normal.png",
            "http://a3.twimg.com/profile_images/511790713/AG_normal.png",
            "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
            "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png",
            "http://a3.twimg.com/profile_images/72774055/AndroidHomme-LOGO_normal.jpg",
            "http://a1.twimg.com/profile_images/349012784/android_logo_small.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon_normal.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png"
    };

    ListView lv;    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv= (ListView) findViewById(R.id.lv);
        lv.setAdapter(new LazyAdapter(this,mStrings));
    }
}

activity_main.xml


    

LazyAdapter.java

public class LazyAdapter extends BaseAdapter {
    private Activity activity;
    private String data[];
    private LayoutInflater inflater=null;
    public ImageLoader imageLoader; 
    DisplayImageOptions options;
    public LazyAdapter(Activity a, String[] d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        File cacheDir = StorageUtils.getOwnCacheDirectory(a, "MyFolderCache");

       //Get singletone instance of ImageLoader
        imageLoader = ImageLoader.getInstance();
       //Create configuration for ImageLoader (all options are optional)
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
             //You can pass your own memory cache implementation
             .discCacheExtraOptions(1024, 1024, CompressFormat.PNG, 100)
             .discCache(new UnlimitedDiscCache(cacheDir))//You can pass your own disc cache implementation
             .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
             .enableLogging()
             .build();
       //Initialize ImageLoader with created configuration. Do it once.
        imageLoader.init(config);
        //imageLoader.init(ImageLoaderConfiguration.createDefault(a));
       //imageLoader=new ImageLoader(activity.getApplicationContext());
        options = new DisplayImageOptions.Builder()
             .showStubImage(R.drawable.ic_launcher)
             .cacheInMemory()
             .cacheOnDisc()
             .displayer(new RoundedBitmapDisplayer(20))
             .build();
    }

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

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        ViewHolder vh = new ViewHolder();;
        if(convertView==null)
        {

            vi = inflater.inflate(R.layout.row, null);   
            vh.iv=(ImageView)vi.findViewById(R.id.ivv); 
            vh.pb= (ProgressBar)vi.findViewById(R.id.pb); 
            vh.tv = (TextView) vi.findViewById(R.id.textView1);
            vh.tv1= (TextView) vi.findViewById(R.id.textView2);
        }
        vh.tv.setText("Image in postion =");
        vh.tv1.setText(""+position);
        display(vh.iv, data[position], vh.pb);
        //imageLoader.displayImage(data.get(position).toString(), image,options);
        return vi;
    }

    public void display(ImageView img, String url, final ProgressBar spinner)
    {
        imageLoader.displayImage(url, img, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                spinner.setVisibility(View.VISIBLE);
            }
            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                spinner.setVisibility(View.GONE);
            }
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            spinner.setVisibility(View.GONE);
            }
            @Override
            public void onLoadingCancelled(String imageUri, View view) {

            }
        });
    }

    public static class ViewHolder
    {
        ImageView iv;
        TextView tv,tv1;
        ProgressBar pb;
    }
}

row.xml

<?xml version="1.0" encoding="utf-8"?>

    
    
    
    

Дадаць дазвол у маніфесце

 

enter image description here

17
дададзена
@ D'yerMak'er вам трэба разабраць JSON і захоўваць яго ў спіс і даць URL у карыстацкім адаптары. яго просты, але вам трэба змяніць тое ж самае. вышэйпаказаныя працы ў абодвух жорстка і URL-адрасоў, якія вы атрымаеце ад разбору JSON. я адчуў, як і выкарыстоўваць тое ж самае ў маім дадатку
дададзена аўтар Raghunandan, крыніца
@Rarw, калі б гэта было так, я думаю, ён бы не запытаўся, так ці інакш
дададзена аўтар Raghunandan, крыніца
@ D'yerMak'er добра я пакідаю гэта вам вырашаць, які адказ дапамог найбольш. але я магу сказаць, што вышэй працуе выдатна. усё, што вам трэба зрабіць, гэта даць URLs AFER разборы JSON.
дададзена аўтар Raghunandan, крыніца
@DurgeshKumar я не універсальны пагрузчык малюнка на працягу доўгага часу. Я выкарыстоўваю слізгаценне або Picasso. Калі ласка, праверце іх дакументацыю. Калі вы не можаце стварыць свой уласны кэш і атрымаць шлях малюнка, а затым павялічыць малюнак, выкарыстоўваючы матрыцу. Акрамя таго, калі ў вас ужо ёсьць вобраз я не думаю, што любы малюнак загрузнік загрузіць малюнак зноў. Усё, што вам трэба зрабіць, гэта маштабаваць малюнак
дададзена аўтар Raghunandan, крыніца
@DurgeshKumar так, вы можаце выкарыстоўваць Picasso або слізгаеце і выкарыстоўваць пераўтварэнне, калі гэта неабходна
дададзена аўтар Raghunandan, крыніца
@Raghunandan: на другім думаў, ваш адказ больш поўны для людзей, хто можа хацець рашэнне гэта ў будучыні, так што прыняў ваш адказ. Вялікі дзякуй за адказ. гэта выдатна дапамагло.
дададзена аўтар D'yer Mak'er, крыніца
@Raghunandan: ды гэта робіць. і так, цяпер я зрабіў тое ж самае, выкарыстоўваючы адказ вы падзяліліся і па гэтай спасылцы ( github.com/AndroidBegin/… ) Панкай сумесна. дзякуй за абмен падрабязнага рашэння, а таксама абмен ведаў канцэпцыі адкладзенай загрузкі.
дададзена аўтар D'yer Mak'er, крыніца
@Raghunandan: прабачэнні за позні адказ. Маё пытанне было, як я меў справу з многімі URL-адрасы радкоў, якія паступаюць ад сервера ў фармаце JSON. Я павінен быў сфармаваць гэтыя URLо, а затым працягнуць з задачай запампоўкі. рашэнне, якое вы далі выдатна працуе для закадаваныя радкоў URL-адрасоў. але не так у маім выпадку. пасля спробы высветліць розныя спосабы я адказваў на гэтае пытанне. Цяпер рашэнне было прапанавана Панкадж Шарма ўніз дапамог мне ў фарміраванні майго адказу. таму я збіраюся прыняць, што ў якасці адказу. але дзякуй за тлумачэнне канцэпцыі лянівым спісу і класаў, неабходных, каб зрабіць лянівы спіс работ. вялікі дзякуй.
дададзена аўтар D'yer Mak'er, крыніца
як наконт калі малюнка знаходзяцца ў тэчцы прылады лакальна?
дададзена аўтар ralphgabb, крыніца
Ну, калі малюнак ўжо загружана ў ListView тады як адзін змогуць павялічыць гэты вобраз? Што будзе поўны URL, якія захоўваюцца ў сістэме? Я не хачу, каб паўторна спампаваць гэты малюнак з Інтэрнэту, каб павялічыць у наступнай дзейнасці?
дададзена аўтар Durgesh Kumar, крыніца
Я выкарыстаў Picasso, і яна працавала добра гэта значыць `Picasso.with (CTX) .load (малюнак) .Поставить() у ((ImageView) малюнкі);`.
дададзена аўтар Durgesh Kumar, крыніца

Калі ласка, паспрабуйце гэта з універсальным пагрузчыкам малюнка

public class DetailsListViewAdapter extends ArrayAdapter{
    private Context context;
    private List detailList;
    DisplayImageOptions options;
    public ImageLoader imageLoader;

    public DetailsListViewAdapter(Context context, int textViewResourceId,List detailList) {
        super(context, textViewResourceId,detailList);
        this.detailList = detailList;
        this.context = context;
        imageLoader = ImageLoader.getInstance();
        imageLoader.init(ImageLoaderConfiguration.createDefault(context));
        options = new DisplayImageOptions.Builder()
        .showImageForEmptyUri(R.drawable.blankimage)
        .showImageOnFail(R.drawable.blankimage)
        .resetViewBeforeLoading()
        .cacheOnDisc()
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
        .bitmapConfig(Bitmap.Config.RGB_565)
        .displayer(new FadeInBitmapDisplayer(300))
        .build();
    }

    static class ViewHolder{
        private TextView popupDetails;
        private TextView pubDate;
        private ImageView image;
        private ProgressBar progress;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.details_list_item, null);
            holder = new ViewHolder();
            holder.popupDetails=(TextView)v.findViewById(R.id.detailHeading);
            holder.pubDate = (TextView)v.findViewById(R.id.pubDate);
            holder.image = (ImageView)v.findViewById(R.id.listImg);
            holder.progress = (ProgressBar)v.findViewById(R.id.progressBar);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        Entry value = detailList.get(position);
        holder.popupDetails.setText(value.getTitle());
        holder.pubDate.setText(value.getPubDate());
        String url = value.getImageLink();
        try {
            if(url.length() > 5) {
                holder.image.setVisibility(View.VISIBLE);
                loadImage(holder.image,url,holder.progress);
            } else {
                if(url.equals("NO")) {
                    holder.image.setVisibility(View.INVISIBLE);
                } else {
                    holder.image.setVisibility(View.GONE);
                }
            }
        } catch (Exception e) {
            Logger.show(e);
        }
        v.setBackgroundColor(Color.WHITE);
        return v;

    }
    public void loadImage(ImageView imageView, String loadURL,final ProgressBar progress) {
        imageLoader.displayImage(loadURL, imageView, options, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                progress.setVisibility(View.VISIBLE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                String message = null;
                switch (failReason) {
                case IO_ERROR:
                    message = "Input/Output error";
                    break;
                case OUT_OF_MEMORY:
                    message = "Out Of Memory error";
                    break;
                case NETWORK_DENIED:
                    message = "Downloads are denied";
                    break;
                case UNSUPPORTED_URI_SCHEME:
                    message = "Unsupported URI scheme";
                    break;
                case UNKNOWN:
                    message = "Unknown error";
                    break;
                }
                Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onLoadingComplete(final String imageUri, View view, final Bitmap loadedImage) {
                progress.setVisibility(View.INVISIBLE);
            }  
        });
    }
}
3
дададзена
Я паспрабаваў гэта: глядзіце, калі ласка, тут stackoverflow.com/questions/16861807/… элемент кіравання ListView будзе перапрацоўваць самую першы погляд, перш чым малюнак можа загружаць і таму нагрузка будзе адменена, і малюнак па першым пытанні не будзе адлюстроўвацца.
дададзена аўтар WIllJBD, крыніца

Калі ласка, паспрабуйце гэта з універсальным пагрузчыкам малюнка

public class DetailsListViewAdapter extends ArrayAdapter{
    private Context context;
    private List detailList;
    DisplayImageOptions options;
    public ImageLoader imageLoader;

    public DetailsListViewAdapter(Context context, int textViewResourceId,List detailList) {
        super(context, textViewResourceId,detailList);
        this.detailList = detailList;
        this.context = context;
        imageLoader = ImageLoader.getInstance();
        imageLoader.init(ImageLoaderConfiguration.createDefault(context));
        options = new DisplayImageOptions.Builder()
        .showImageForEmptyUri(R.drawable.blankimage)
        .showImageOnFail(R.drawable.blankimage)
        .resetViewBeforeLoading()
        .cacheOnDisc()
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
        .bitmapConfig(Bitmap.Config.RGB_565)
        .displayer(new FadeInBitmapDisplayer(300))
        .build();
    }

    static class ViewHolder{
        private TextView popupDetails;
        private TextView pubDate;
        private ImageView image;
        private ProgressBar progress;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.details_list_item, null);
            holder = new ViewHolder();
            holder.popupDetails=(TextView)v.findViewById(R.id.detailHeading);
            holder.pubDate = (TextView)v.findViewById(R.id.pubDate);
            holder.image = (ImageView)v.findViewById(R.id.listImg);
            holder.progress = (ProgressBar)v.findViewById(R.id.progressBar);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        Entry value = detailList.get(position);
        holder.popupDetails.setText(value.getTitle());
        holder.pubDate.setText(value.getPubDate());
        String url = value.getImageLink();
        try {
            if(url.length() > 5) {
                holder.image.setVisibility(View.VISIBLE);
                loadImage(holder.image,url,holder.progress);
            } else {
                if(url.equals("NO")) {
                    holder.image.setVisibility(View.INVISIBLE);
                } else {
                    holder.image.setVisibility(View.GONE);
                }
            }
        } catch (Exception e) {
            Logger.show(e);
        }
        v.setBackgroundColor(Color.WHITE);
        return v;

    }
    public void loadImage(ImageView imageView, String loadURL,final ProgressBar progress) {
        imageLoader.displayImage(loadURL, imageView, options, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                progress.setVisibility(View.VISIBLE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                String message = null;
                switch (failReason) {
                case IO_ERROR:
                    message = "Input/Output error";
                    break;
                case OUT_OF_MEMORY:
                    message = "Out Of Memory error";
                    break;
                case NETWORK_DENIED:
                    message = "Downloads are denied";
                    break;
                case UNSUPPORTED_URI_SCHEME:
                    message = "Unsupported URI scheme";
                    break;
                case UNKNOWN:
                    message = "Unknown error";
                    break;
                }
                Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onLoadingComplete(final String imageUri, View view, final Bitmap loadedImage) {
                progress.setVisibility(View.INVISIBLE);
            }  
        });
    }
}
3
дададзена
Я паспрабаваў гэта: глядзіце, калі ласка, тут stackoverflow.com/questions/16861807/… элемент кіравання ListView будзе перапрацоўваць самую першы погляд, перш чым малюнак можа загружаць і таму нагрузка будзе адменена, і малюнак па першым пытанні не будзе адлюстроўвацца.
дададзена аўтар WIllJBD, крыніца

Вось як я загружаю і малюнкі кэша ў ListView , які стварае спіс кантактаў для карыстальніка. Такім чынам, уявіце фатаграфію на левым баку, некаторыя тэкставыя прадстаўлення аб праве (які гучыць блізка да праблемы вы маеце справу з. Ігнаруйце выродлівыя тэгі адладкі і, верагодна, бедны фарматаванне (прабачце). Я думаю, што гэта накшталт як LazyList, але вось падрабязнае тлумачэнне ў выпадку, калі хто быў зьбянтэжаны.

<�Моцны> Крок 1: Налада кэша

private LruCache memoryCache;
private HashMap idPairs = new HashMap(); 

У маім падыходзе я выкарыстоўваю LruCache і HashMap для адсочвання карыстальніка малюнкі, якія я запампаваў. Вы ўбачыце, як яго рэалізаваць пазней, але ідэя складаецца ў тым, каб пазбегнуць загрузкі матэрыялу з сервера, калі вы не павінны. Затым у OnCreate() ці некаторыя з іх звязаны метад ініцыялізацыі кэша.

    final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024);
    final int cacheSize = maxMemory/8;
    memoryCache = new LruCache(cacheSize)  {
        @Override 
        protected int sizeOf(String key, Bitmap bitmap){
            return (bitmap.getRowBytes() * bitmap.getHeight())/1024; //don't use getByteCount for API < 12
        }
    };

Мой наступны крок, каб дадаць «пусты» малюнак растравага малюнка па змаўчанні ў кэш ў выпадку, калі я дасягну запіс, якая не мае карціну, звязаную з ім. Такім чынам, я толькі павінен апрацаваць і дадаць растравы раз

Bitmap defaultPicture = BitmapFactory.decodeResource(getResources(), R.drawable.default_user_picture);
    addBitmapToMemoryCache("default", defaultPicture);

Тады яго час, каб атрымаць дадзеныя, неабходныя для спісу!

<�Моцны> Крок 2: Атрымаць дадзеныя

private class GetPeopleData extends AsyncTask {

    @Override
    protected Void doInBackground(JSONArray...lists) {
        HttpClient httpClient = new DefaultHttpClient(); 
        HttpPost httpPost = new HttpPost();
        ResponseHandler  responseHandler = new BasicResponseHandler();
        if(DEBUG) Log.d("GET PEOPLE DATA TASK", lists[0].length() + " users");
        getUsers(lists[0], httpClient, httpPost, responseHandler);
        return null;
    }

    @Override
    protected void onPostExecute(Void result){
        updateUserListView();
    }

}

Вось Borring AsyncTask , які прымае JSONArray карыстацкіх дадзеных у якасці аргументу. Я пакінуў тую частку, таму што гэта ў значнай ступені толькі асноўныя HTTP загрузкі, які не патрабуе тлумачэньня. Метад getUsers дзе я пачынаю ставіць разам, што будзе дададзена да майго ListView . Што рабіць далей апрацоўваць JSON, загружаны з сервера для стварэння карыстацкіх аб'ектаў, якія будуць дададзеныя яго ў спіс карыстальнікаў, якія будуць адлюстроўвацца.

private void getUsers(JSONArray userArray, HttpClient httpClient, HttpPost httpPost, ResponseHandler responseHandler){
    if(DEBUG) Log.d("USERS ARRAY", userArray.length() + " users");
    try{

        users = new ArrayList();
        if(DEBUG) Log.d("User Array -START", "" + users.size());
        //Go through userArray and get information needed for list
        for(int i = 0; i < userArray.length(); i++){
            User u = new User();
            if(DEBUG) Log.d("User Array - ADD USER", "" + users.size());
            String profileId = userArray.getJSONObject(i).getString("profileid");
            u.setId(userArray.getJSONObject(i).getString("id"));
            u.setDisplayName(userArray.getJSONObject(i).getString("displayname"));
            u.setStatus(userArray.getJSONObject(i).getString("status"));

            //check HashMap for sender/profileid pair
            if(idPairs.containsKey(profileId)){
                if(DEBUG) Log.d("idPairs", "User in HashMap");
                profileId = idPairs.get(profileId);
            } else {
                if(DEBUG) Log.d("idPairs", "User not in HashMap. Add profileId");
                idPairs.put("profileId", profileId);
            }
            u.setProfilePicture(getProfilePictureFromCache(profileId, httpClient, httpPost, responseHandler)); //check cache for image
            users.add(u);
            if(DEBUG) Log.d("User info", u.toString());
        }
    } catch (Exception e) {
        Log.e("BACKGROUND_PROC", e.getMessage());
    }
}

Я звязаць малюнак з аб'ектам карыстальніка, які ў канчатковым выніку будзе адлюстроўвацца. Я мяркую, што гэта не пустая трата часу, так як малюнак здабываюцца з кэша растравага

private Bitmap getProfilePictureFromCache(String profileId, HttpClient httpClient, HttpPost httpPost, ResponseHandler responseHandler){
    Bitmap defaultPicture = getBitmapFromMemCache("default");
    Bitmap profilePicture = getBitmapFromMemCache(profileId);
    if(profilePicture != null){
        return profilePicture;
    } else {        
        String pictureString = getProfilePic(profileId, httpClient, httpPost, responseHandler);
        if(!pictureString.isEmpty()){       
            byte[] decodedString = Base64.decode(pictureString, Base64.DEFAULT);
            profilePicture = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
            addBitmapToMemoryCache(profileId, profilePicture);
            if(DEBUG) Log.d("MEMCACHE", "Download and store picture for " + profileId);
            return profilePicture;
        } else if (defaultPicture != null && pictureString.equals(null)) {
            if(DEBUG) Log.d("MEMCACHE", "Load default picture");
            return defaultPicture;
        }
    }
    return defaultPicture;
}

Калі выява існуе ў кэшы ён вяртаецца, калі не спампоўваецца. Для мяне, паказваючы карыстальнікам, кожнае выява кэшуецца ў адпаведнасці з ідэнтыфікатарам карыстальніка, так што нават калі хто-то павінны былі з'яўляцца больш за адзін раз у спісе будзе толькі адна карціна захоўваецца ў кэшы для гэтага карыстальніка.

ImageView profile_picture = (ImageView) v.findViewById(R.id.profile_picture);
if(profile_picture != null){
                profile_picture.setImageBitmap(u.getProfilePicture());
            }

Адзінае, што засталося зрабіць, гэта знайсці ImageView ў адаптары і ўсталяваць, што від на карцінку вы звязаная з аб'ектам у вашым спісе.

2
дададзена

Вы хочаце нешта простая ў выкарыстанні? З Турбуйцеся аб кэшавання файлаў, выдаленне кэша, выпуск, калі памяць на памежнай лініі?

Паспрабуйце LazyList, праверыць гэта:

https://github.com/nicolasjafelle/LazyList

Як тлумачыцца, вам трэба ўсяго толькі стварыць Singleton ў сваім класе прыкладанняў або любой iншай дзейнасцi або фрагмент:

//To use the default external folder, this folder will be deleted when the app no longe exists.
ImageLoader.getInstance().init(getApplicationContext());
//Or to use another folder, use...
//ImageLoader.getInstance().init(getApplicationContext(), "MyExternalFolder");

Тады, на ваш погляд, што мае ImageView для адлюстравання выявы дэ вам трэба рэалізаваць інтэрфейс ImageProcessingCallback:

public class MyItemView extends LinearLayout implements ImageProcessingCallback {
...
//Do what you need in methods onImagePreProcessing() and onImageProcessing(Bitmap     bitmap)
...
ImageLoader.getInstance().displayImage(data[position], myView);

Нарэшце, вам трэба дадаць гэты дазвол у вашым AndroidManifest.xml



І гэта ўсё. Тады ў вас ёсць метады, каб ачысціць кэш для кэша барана ці дыскавай кэша або абодва.

1
дададзена

Вы хочаце нешта простая ў выкарыстанні? З Турбуйцеся аб кэшавання файлаў, выдаленне кэша, выпуск, калі памяць на памежнай лініі?

Паспрабуйце LazyList, праверыць гэта:

https://github.com/nicolasjafelle/LazyList

Як тлумачыцца, вам трэба ўсяго толькі стварыць Singleton ў сваім класе прыкладанняў або любой iншай дзейнасцi або фрагмент:

//To use the default external folder, this folder will be deleted when the app no longe exists.
ImageLoader.getInstance().init(getApplicationContext());
//Or to use another folder, use...
//ImageLoader.getInstance().init(getApplicationContext(), "MyExternalFolder");

Тады, на ваш погляд, што мае ImageView для адлюстравання выявы дэ вам трэба рэалізаваць інтэрфейс ImageProcessingCallback:

public class MyItemView extends LinearLayout implements ImageProcessingCallback {
...
//Do what you need in methods onImagePreProcessing() and onImageProcessing(Bitmap     bitmap)
...
ImageLoader.getInstance().displayImage(data[position], myView);

Нарэшце, вам трэба дадаць гэты дазвол у вашым AndroidManifest.xml



І гэта ўсё. Тады ў вас ёсць метады, каб ачысціць кэш для кэша барана ці дыскавай кэша або абодва.

1
дададзена

Я не ведаю, пра захоўванне малюнкаў, як маё прыкладанне выкарыстоўвае выявы з APK. Аднак я лічу, для адлюстравання гэтых малюнкаў вы хочаце прыстасаваныя Arrayadapter.

Гэта раздзімае макет для кожнага элемента і змяшчае яго ў спісе. Гэта размяшчэнне вызначаецца і xml макет вы ствараеце і паказаць у яго канструкцыі. Вы павінны паспрабаваць пашырэннямі любога адаптара вы зараз карыстаецеся для вашага спісу гледжання з наладжвальным той, які ўсталёўвае выгляд малюнка ў адпаведнасці з п.

Я раблю гэта з ImageView.setImageResource (ідэнтыфікатар рэсурсу); Але ваш прабег можа вар'іравацца. У мяне ёсць свае выявы ў APK не ведаюць, як вывесці яго са знешняга крыніцы

0
дададзена

Я не ведаю, пра захоўванне малюнкаў, як маё прыкладанне выкарыстоўвае выявы з APK. Аднак я лічу, для адлюстравання гэтых малюнкаў вы хочаце прыстасаваныя Arrayadapter.

Гэта раздзімае макет для кожнага элемента і змяшчае яго ў спісе. Гэта размяшчэнне вызначаецца і xml макет вы ствараеце і паказаць у яго канструкцыі. Вы павінны паспрабаваць пашырэннямі любога адаптара вы зараз карыстаецеся для вашага спісу гледжання з наладжвальным той, які ўсталёўвае выгляд малюнка ў адпаведнасці з п.

Я раблю гэта з ImageView.setImageResource (ідэнтыфікатар рэсурсу); Але ваш прабег можа вар'іравацца. У мяне ёсць свае выявы ў APK не ведаюць, як вывесці яго са знешняга крыніцы

0
дададзена