从列表视图中显示它们的链接下载图像

时间:2014-11-20 08:24:58

标签: android

我有一个列表,其中显示我需要显示图像的每个项目。我正在从链接下载图像并显示它但是我面临着显示它们的问题,因为列表首先被文本填充然后再下载图像。另外一个问题是无论何时我在列表中向上或向下图像消失并再次下载,以便当我到达列表项顶部时图像消失

EventTask

        public RecieveEventsTask(EventListActivity c, String critiria) {
        appContext = c;
        session = new SessionManager(appContext);
        HashMap<String, String> user = session.getUserDetails();
        String id = user.get(SessionManager.KEY_ID);

        url = "http://bioscopebd.com/mobileappand/geteventlist?user_id=" + id;
    }

    public RecieveEventsTask(MyEventList c, String critiria) {
        my_appContext = c;
        session = new SessionManager(my_appContext);
        HashMap<String, String> user = session.getUserDetails();

        // id
        String id = user.get(SessionManager.KEY_ID);
        url = "http://bioscopebd.com/mobileappand/getmyeventlist?user_id=" + id;
    }

    protected void onPreExecute() {

        dialog = new ProgressDialog(appContext == null ? my_appContext
                : appContext);
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setMessage("Loading Events...");
        dialog.show();
        super.onPreExecute();

    }

    String filterResponseString(String r) {
        return r.replace("\r\n", "");
    }

    @Override
    protected String doInBackground(String... uri) {

        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;

        try {

            response = httpclient.execute(new HttpGet(url));
            StatusLine statusLine = response.getStatusLine();

            if (statusLine.getStatusCode() == HttpStatus.SC_OK) {

                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();

                responseString = out.toString();
                responseString = filterResponseString(responseString);

            } else {
                // Closes the connection.
                response.getEntity().getContent().close();

                Utility.showMessage(appContext, "Cannot Connect To Internet");
            }
        } catch (Exception e) {
            // TODO Handle problems..
        }
        return responseString;
    }

    @Override
    protected void onPostExecute(String result) {
        dialog.dismiss();

        if (responseString != null) {
            ArrayList<EventModel> eventsList = new ArrayList<EventModel>();
            ;
            JSONArray jsonArr;

            try {

                // Log.v("json", responseString);

                jsonArr = new JSONArray(responseString);
                // jsonArr = events.getJSONArray("events");

                for (int i = 0; i < jsonArr.length(); i++) {
                    JSONObject jsonObj = jsonArr.getJSONObject(i);

                    EventModel event = new EventModel();

                    event.setTitle(jsonObj.getString("event_info_title"));
                    event.setDescription(jsonObj.getString("event_info_desc"));

                    // Log.v("logo data "+i, jsonObj.getString("image_logo"));

                    event.setBanner(jsonObj.getString("image_banner"));
                    event.setLogo(jsonObj.getString("image_logo"));
                    // event.setDescription(jsonObj.getString("event_info_desc"));
                    event.setCategory(jsonObj.getString("event_cat_title"));

                    event.setStartDate(jsonObj
                            .getString("event_info_start_date"));
                    event.setEndDate(jsonObj.getString("event_info_end_date"));

                    event.setStartTime(jsonObj
                            .getString("event_info_start_time"));
                    event.setEndTime(jsonObj.getString("event_info_end_time"));
                    event.setEventId(jsonObj.getString("event_info_id"));
                    event.setPhone(jsonObj.getString("event_info_mobile"));
                    event.setEmail(jsonObj.getString("event_info_email"));
                    event.setWeblink(jsonObj.getString("event_info_web"));
//                    
//                  logoDownloader = new ImageDownloader(event.getLogoBitmap());
//                  logoDownloader.execute(event.getLogo());
//                  
//                  bannerDownloader = new ImageDownloader(event.getBannerBitmap());
//                  bannerDownloader.execute(event.getBanner());
//                  
                    eventsList.add(event);

                }

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

            if (appContext != null) {
                appContext.showEventsDataLoaded(eventsList);

            }
            if (my_appContext != null) {
                my_appContext.showEventsDataLoaded(eventsList);
            }

            // else
            // {
            // Log.v("check:","null");
            //
            // }
            //
        } else {
            if(appContext!=null)
            {
            Utility.showMessage(appContext, "Cannot Connect To Internet");

            }
            else {

                Utility.showMessage(my_appContext, "Cannot Connect To Internet");
            }
            // 
        }

        super.onPostExecute(result);
        // Do anything with response..
    }

我在setlogo和setbanner方法中获得了图片链接

适配器类

    private final Activity context;

    private final ArrayList<EventModel> events;

    ImageDownloader imgDownloader;
    Bitmap bitmap;
    ImageView icon;

    public EventsListAdapter(Activity context, ArrayList<EventModel> events) {

        super(context, com.bioscope.R.layout.event_listitem, events);

        this.context = context;
        this.events = events;

    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {

        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(com.bioscope.R.layout.event_listitem,
                null, true);

        TextView title = (TextView) rowView
                .findViewById(com.bioscope.R.id.title);
        title.setText(events.get(position).getTitle());

        TextView description = (TextView) rowView
                .findViewById(com.bioscope.R.id.description);
        description.setText(events.get(position).getDescription());

        TextView category = (TextView) rowView
                .findViewById(com.bioscope.R.id.category);
        category.setText(events.get(position).getCategory());

        Log.v("logo", events.get(position).getLogo());

        icon = (ImageView) rowView
                .findViewById(com.bioscope.R.id.event_icon);

        //imgDownloader = new ImageDownloader(icon);

        new LoadImage().execute(events.get(position).getLogo());


        //ImageLoader.displayImage(events.get(position).getLogo().toString(), icon);

        return rowView;

    }


    private class LoadImage extends AsyncTask<String, String, Bitmap> {
        @Override
            protected void onPreExecute() {
                super.onPreExecute();
//              pDialog = new ProgressDialog(MainActivity.this);
//              pDialog.setMessage("Loading Image ....");
//              pDialog.show();
        }
           protected Bitmap doInBackground(String... args) {
             try {
                   bitmap = BitmapFactory.decodeStream((InputStream)new URL(args[0]).getContent());
            } catch (Exception e) {
                  e.printStackTrace();
            }
          return bitmap;
           }
           protected void onPostExecute(Bitmap image) {
             if(image != null){
               icon.setImageBitmap(image);
               //pDialog.dismiss();
             }else{
               //pDialog.dismiss();
              // Toast.makeText(EventListActivity.this, "Image Does Not exist or Network Error", Toast.LENGTH_SHORT).show();
                // icon.set
             }
           }

}

}

我在列表项的图标中设置图像

活动类

private ListView list;
    private MenuItem myActionMenuItem;
    private EditText myActionEditText;
    private TextView myActionTextView;
    private AutoCompleteTextView actv;
    // private Spinner spinner;
    private Button liveEvent;

    private ArrayList<EventModel> eventsList;

    private static final String[] paths = { "All", "Favourites" };

    private ArrayList<String> array_sort;
    int textlength = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(com.bioscope.R.layout.eventlist);



        RecieveEventsTask task = new RecieveEventsTask(this, "all");
        task.execute();

    }

    public void showEventsDataLoaded(ArrayList<EventModel> eventsList) {

        this.eventsList = eventsList;

        // for(EventModel e:eventsList )
        // {
        // Log.v("title", e.getTitle());
        // }

        EventsListAdapter adapter = new EventsListAdapter(
                EventListActivity.this, eventsList);

        list = (ListView) findViewById(com.bioscope.R.id.listView1);
        list.setAdapter(adapter);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                // Toast.makeText(EventList.this, "You Clicked an item ",
                // Toast.LENGTH_SHORT).show();

                showEventInformaion(position);

            }
        });

        // RecieveCategoriesTask task = new RecieveCategoriesTask(this, "all");
        // task.execute();

        liveEvent = (Button) findViewById(R.id.liveEvent);
        liveEvent.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent i = new Intent(EventListActivity.this,
                        LiveEventActivity.class);
                startActivity(i);
            }
        });
    }



    public void showCategoryListDataLoaded(String response) {
        Utility.showMessage(this, response);

    }

然后在我的活动中,我调用异步reciver任务来加载所有数据和链接,并在我的模型类中设置它们。

1 个答案:

答案 0 :(得分:0)

下载位图时,您必须在Main类中设置ResponseCache

像这样:

try {
   File httpCacheDir = new File(getApplicationContext().getCacheDir(), "http");
   long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
   HttpResponseCache.install(httpCacheDir, httpCacheSize);
} catch (IOException e) { } 

connection.setUseCaches(true);

http://practicaldroid.blogspot.com/2013/01/utilizing-http-response-cache.html