Question

I am trying to use Endless listview adapter in application code but some how i am just not able to see any values in the listview. My code is running perfectly fine when using normal listview adapter. I an trying to use CWAC- endless adpater. I can get how to run it with my asynctask as it gives me blank screen after loding. Below is my code for the some.

 public class EndlessAdapterExample extends ListActivity { 
        public JSONArray jsonarray,jsondatearray; 

        public String url;
        public String selectedvalue;
        public String TAG = "TAG Event Display";
        public String SuggestCity;
        public String SuggestState;
        public String suggestCountry;
        public String event_id,address;


        String lat; 
        String lng;

        public String event_name;
        public String dateKey;
        public String datetime,timenew;
        Calendar cal;

        public SharedPreferences prefs;
        public Editor editor;
        public String access_token,id,username;
        public static ArrayList<EventsBean> arrayEventsBeans = new ArrayList<EventsBean>();
        ArrayList<DateBean> sortArray = new ArrayList<DateBean>();


        public SAmpleAdapter adapter;
        public ImageView img_menu,img_calender;
        public ListView listview;


         static int LIST_SIZE;
         private int mLastOffset = 0;

         static final int BATCH_SIZE = 10;

         ArrayList<EventsBean> countriesSub = new ArrayList<EventsBean>();


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setTheme(android.R.style.Theme);
            setContentView(R.layout.sample_endless);



            listview = (ListView)findViewById(android.R.id.list);   

        try {
            // Preferences values fetched from the preference of FBConnection class.
            prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            access_token = prefs.getString("access_token", null);
            id = prefs.getString("uid", null);
            username = prefs.getString("username", null);



            if(access_token == null && id == null && username == null)
            {
                Toast.makeText(getApplicationContext(), "FaceBook Login was not successful" +
                        "/nPlease Relogin.", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Log.i(TAG, "VALUES::" + access_token+ "  " + id + "  " +username);
                url = "mu Url"
            }

        } catch (NullPointerException e) {

            Log.i(TAG, "User Not Logged IN " + e.getMessage());
                // TODO Auto-generated catch block
                e.printStackTrace();
        }




            init();

         listview.setOnItemClickListener(new OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) {
         // TODO Auto-generated method stub

             // Fetching the position from the listview which has been selected.

            }
    });


        }    

        private void init() {

             new FetchEventValues().execute(); 

             }

             private void setLastOffset(int i) {
              mLastOffset = i;  
             }

             private int getLastOffset(){
              return mLastOffset;
             }

             private void displayList(ArrayList<EventsBean> countriesSub) {  
              setListAdapter(new DemoAdapter());
             }


    // AsyncTask Class called in the OnCreate() when the activity is first started.


        public class FetchEventValues extends AsyncTask<Void, ArrayList<EventsBean>, ArrayList<EventsBean>>
        {
            ProgressDialog progressdialog = new  ProgressDialog(EndlessAdapterExample.this);

            ArrayList<EventsBean> merge = new ArrayList<EventsBean>();

            ArrayList<EventsBean> localList;


            public  EventsBean eventsbean;

        @SuppressLint("SimpleDateFormat")
        @SuppressWarnings("unchecked")
        @Override
        protected ArrayList<EventsBean> doInBackground(Void... params) {
             // Creating JSON Parser instance
            JsonParser jParser = new JsonParser();

           // getting JSON string from URL

            JSONObject jsonobj = jParser.getJSONFromUrl(url);

            Log.i(TAG, "URL VALUES:" + url);

            try{
                 // Code to get the auto complete values  Autocomplete Values

                JSONArray jsonAarray = jsonobj.getJSONArray(Constants.LOCATIONS);

                eventsbean = new EventsBean();

                Log.e(TAG, "Location Array Size:" + jsonAarray.length());   

                for(int j = 0 ; j < jsonAarray.length() ; j++)
                 {
                    if(!jsonAarray.getJSONObject(j).isNull(Constants.LOCATION_CITY) && !jsonAarray.getJSONObject(j).isNull(Constants.LOCATION_STATE) && !jsonAarray.getJSONObject(j).isNull(Constants.LOCATION_COUNTRY))
                    {
                        JSONObject job = jsonAarray.getJSONObject(j);

                        if(job.has(Constants.LOCATION_STATE))
                        {
                            SuggestCity = job.getString(Constants.LOCATION_CITY);
                            eventsbean.setLocation_city(job.getString(Constants.LOCATION_CITY));
                            SuggestState = job.getString(Constants.LOCATION_STATE);
                            eventsbean.setLocation_state(job.getString(Constants.LOCATION_STATE));
                            suggestCountry = job.getString(Constants.LOCATION_COUNTRY);
                            eventsbean.setLocation_country(job.getString(Constants.LOCATION_COUNTRY));
                        }       


                    } 


                 }


                       // JSON object to fetch the events in datewise format
                       JSONObject eventobject = jsonobj.getJSONObject("events");

                       // @SuppressWarnings("unchecked")
                        Iterator<Object> keys = eventobject.keys();

                        while (keys.hasNext()) {

                          String datestring = String.valueOf(keys.next());

                          if (datestring.trim().length() > 0) {
                              SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                              Date date = formatter.parse(datestring);

                              DateBean dateBean = new DateBean(date);
                              sortArray.add(dateBean);
                             } 

                         // JSONArray jsonArray = eventobject.getJSONArray(datestring);
                          //System.out.println(" --"+jsonArray);
                        }

                        System.out.println("size:"+sortArray.size());

                        System.out.println("==========sorting array======");
                        Collections.sort(sortArray,new CompareDate());
                        //reverse order
                        //Collections.reverse(sortArray);

                        for(DateBean d : sortArray){
                         dateKey = new SimpleDateFormat("yyyy-MM-dd").format(d.getDate());
                         System.out.println(dateKey);

                         Date today = new Date();
                         Date alldates = d.getDate();
                         cal = Calendar.getInstance();
                      ///  Calendar alldates1 = Calendar.getInstance();

                         JSONArray jsonArray = eventobject.getJSONArray(dateKey);
                         System.out.println(" --"+jsonArray);


                         for (int i = 0 ; i < jsonArray.length() ; i++)
                         {

                             if (alldates.compareTo(today) > 0) 
                                // if (alldates1  > cal) alldates.getTime() >= today.getTime()
                             {

                             JSONObject jsonobjname = jsonArray.getJSONObject(i);

                             eventsbean = new EventsBean();

                             JSONObject jobjectpicture = jsonobjname.getJSONObject(Constants.PICTURE);
                             JSONObject jobjeventpicture = jobjectpicture.getJSONObject(Constants.DATA);
                             eventsbean.setUrl(jobjeventpicture.getString(Constants.URL));

                             if(jsonobjname.has(Constants.OWNER))
                             {
                             JSONObject owner_obj = jsonobjname.getJSONObject(Constants.OWNER);
                             eventsbean.setOwner_id(owner_obj.getString(Constants.OWNER_ID));
                             eventsbean.setOwner_name(owner_obj.getString(Constants.OWNER_NAME));
                             String owner_name = owner_obj.getString(Constants.OWNER_NAME);
                             Log.i(TAG, "Owner:" + owner_name);
                             }

                            if(!jsonobjname.isNull(Constants.COVER))
                            {
                             JSONObject objectcover = jsonobjname.getJSONObject(Constants.COVER);
                             eventsbean.setCover_id(objectcover.getString(Constants.COVER_ID));
                             eventsbean.setSource(objectcover.getString(Constants.SOURCE));
                             String cover_url = objectcover.getString(Constants.SOURCE);
                             Log.i(TAG, "Cover Url:" + cover_url);
                             eventsbean.setOffset_y(objectcover.getString(Constants.OFFSET_Y));
                             eventsbean.setOffset_x(objectcover.getString(Constants.OFFSET_X));
                            }


                             eventsbean.setName(jsonobjname.getString(Constants.NAME));
                             eventsbean.setEvent_id(jsonobjname.getString(Constants.EVENT_ID));
                             eventsbean.setStart_time(jsonobjname.getString(Constants.START_TIME));
                             eventsbean.setDescription(jsonobjname.getString(Constants.DESCRIPTION));
                             eventsbean.setLocation(jsonobjname.getString(Constants.LOCATION));

                             if(!jsonobjname.isNull(Constants.IS_SILHOUETTE))
                             {
                                eventsbean.setIs_silhouette(jsonobjname.getString(Constants.IS_SILHOUETTE)); 
                             }

                             eventsbean.setPrivacy(jsonobjname.getString(Constants.PRIVACY));
                             datetime = jsonobjname.getString(Constants.START_TIME);


                             if(!jsonobjname.isNull(Constants.VENUE))
                             {

                             JSONObject objectvenue = jsonobjname.getJSONObject(Constants.VENUE);

                             if(objectvenue.has(Constants.VENUE_NAME))
                             {
                                 eventsbean.setVenue_name(objectvenue.getString(Constants.VENUE_NAME));
                                 event_name = objectvenue.getString(Constants.VENUE_NAME); 
                                 Log.i(TAG, "Event Venue Name:" + event_name);
                             }
                             else
                             {   

                             eventsbean.setLatitude(objectvenue.getString(Constants.LATITUDE));
                             eventsbean.setLongitude(objectvenue.getString(Constants.LONGITUDE));
                             eventsbean.setCity(objectvenue.getString(Constants.CITY));
                             eventsbean.setState(objectvenue.getString(Constants.STATE));
                             eventsbean.setCountry(objectvenue.getString(Constants.COUNTRY));
                             eventsbean.setVenue_id(objectvenue.getString(Constants.VENUE_ID));
                             eventsbean.setStreet(objectvenue.getString(Constants.STREET));
                             address = objectvenue.getString(Constants.STREET);
                             eventsbean.setZip(objectvenue.getString(Constants.ZIP));

                    }
                }
                             arrayEventsBeans.add(eventsbean);

                             Log.i(TAG, "arry list values:" + arrayEventsBeans.size());


                            }
                        }
                     }

                   }catch(Exception e){
                       localList=null;
                       Log.e(TAG , "Exception Occured:" + e.getMessage());
                   }


                return arrayEventsBeans;
            }


            class CompareDate implements Comparator<DateBean>{

               @Override
               public int compare(DateBean d1, DateBean d2) {

                return d1.getDate().compareTo(d2.getDate());
               }   
        }



            @Override
            protected void onPostExecute(ArrayList<EventsBean> result) {
                super.onPostExecute(result);
                if(this.progressdialog.isShowing()) 
                {
                    this.progressdialog.dismiss();
                }   

                //   adapter = new SAmpleAdapter(EndlessAdapterExample.this,0, arrayEventsBeans);

                    //listview.setAdapter(adapter);

                //displayList(arrayEventsBeans);

                LIST_SIZE = arrayEventsBeans.size();

                for (int i = 0; i <= BATCH_SIZE; i++) {
                    countriesSub.add(arrayEventsBeans.get(i));
                }
                setLastOffset(BATCH_SIZE);
                displayList(countriesSub);
                Log.i(TAG, "country list:" + countriesSub.size());

            }


            @Override
            protected void onPreExecute() {

                super.onPreExecute();



                this.progressdialog.setMessage("Loading....");
                this.progressdialog.setCanceledOnTouchOutside(false);
                this.progressdialog.show();
            }


        }

        public class SAmpleAdapter extends ArrayAdapter<EventsBean> {

            Context context;

            public   ArrayList<EventsBean> mOriginalvalues;

            private ArrayList<EventsBean> mDisplayvalues;

            ImageLoader imageloader;

            public String datenew,datetime,date_text_value,timenew;

            public int date_text,year;

            public String time,month,description;

            public LayoutInflater inflator =  null;

            public SAmpleAdapter(Context context, int resource, ArrayList<EventsBean> mEventarraylist) {
                super(context, resource , mEventarraylist);
                // TODO Auto-generated constructor stub

                this.mOriginalvalues = mEventarraylist;
                this.mDisplayvalues = mEventarraylist;
                inflator =   (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                imageloader=new ImageLoader(context.getApplicationContext());   

                getFilter();
            }

            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return mOriginalvalues.size();
            }

            @Override
            public EventsBean getItem(int position) {
                // TODO Auto-generated method stub
                return mOriginalvalues.get(position);
            }

            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub

                 Holder viewHolder;

                if(convertView == null)
                {
                     viewHolder=new Holder();
                    convertView = inflator.inflate(R.layout.activity_list_items, parent, false);

                     viewHolder.txt_name = (TextView)convertView.findViewById(R.id.textname);
                     viewHolder.txt_owner_name = (TextView)convertView.findViewById(R.id.ownername);
                     viewHolder.txt_time = (TextView)convertView.findViewById(R.id.date);
                     viewHolder.txt_date = (TextView)convertView.findViewById(R.id.txt_date_value);
                     viewHolder.txt_month = (TextView)convertView.findViewById(R.id.txt_month_value);
                     viewHolder.txt_year = (TextView)convertView.findViewById(R.id.txt_year_value);

                    viewHolder.userimg = (ImageView)convertView.findViewById(R.id.imageView1);

                     convertView.setTag(viewHolder);
                }

                else
                {
                     viewHolder=(Holder)convertView.getTag();
                }


                viewHolder.txt_name.setText(mOriginalvalues.get(position).getName());
                viewHolder.txt_owner_name.setText(mOriginalvalues.get(position).getOwner_name());
                String url = mOriginalvalues.get(position).getSource();

                date_text_value = mOriginalvalues.get(position).getStart_time();

                try {
                    parseDateFromString(date_text_value);
                } catch (Exception e) {
                    Log.i("Adapter TAG", "Date Exception" + e.getMessage());
                }


                viewHolder.txt_date.setText(String.valueOf(date_text));
                viewHolder.txt_month.setText(month);
                viewHolder.txt_year.setText(String.valueOf(year));

                Log.i("TEST", "Date:" + date_text_value);

                imageloader.DisplayImage(url, viewHolder.userimg);

                viewHolder.txt_time.setText(timenew);


                return convertView;
            }

             public void resetData() {
                 mOriginalvalues = mDisplayvalues;
         }



            @SuppressLint("SimpleDateFormat")
            public Date parseDateFromString(String aDateString){
                SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

                Calendar c = Calendar.getInstance();
                Date date= new Date();
                try {

                    date= inputFormat.parse(aDateString);

                    System.out.println(date);

                    SimpleDateFormat day = new SimpleDateFormat("dd-MMM-yyyy");
                    SimpleDateFormat time = new SimpleDateFormat("hh:mm a", Locale.getDefault());

                    SimpleDateFormat month_date = new SimpleDateFormat("MMM");


                    c.setTime(inputFormat.parse(aDateString));

                    System.out.println(day.format(date));

                    datenew  = day.format(date).toString();

                    date_text = c.get(Calendar.DAY_OF_MONTH);
                    month = month_date.format(c.getTime());
                    year = c.get(Calendar.YEAR);

                    System.out.println("Year = " + c.get(Calendar.YEAR));
                    System.out.println("Month = " + month);
                    System.out.println("Day = " + date_text);

                    System.out.println(time.format(date));

                    timenew = time.format(date).toString();

                } catch (ParseException e) {

                    Log.i("TAG", "DateFormat Pasring Error:" + e.getMessage());
                }

                return date;

            }


            private class Holder{
                TextView txt_name;
                TextView txt_owner_name ;
                TextView txt_time;
                TextView txt_date;
                TextView txt_month;
                TextView txt_year;
                ImageView userimg; 
            }

        }




        class DemoAdapter extends EndlessAdapter {
              private RotateAnimation rotate=null;
              ArrayList<EventsBean> tempList = new ArrayList<EventsBean>();

             LayoutInflater inflator =   (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

              DemoAdapter() {
               super(new      SAmpleAdapter(EndlessAdapterExample.this,R.layout.sample_endless,countriesSub));
               inflator =   (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               rotate=new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
                 0.5f, Animation.RELATIVE_TO_SELF,
                 0.5f);
               rotate.setDuration(600);
               rotate.setRepeatMode(Animation.RESTART);
               rotate.setRepeatCount(Animation.INFINITE);
              }

              @Override
              protected View getPendingView(ViewGroup parent) {
               View row=getLayoutInflater().inflate(R.layout.row, null);

               View child=row.findViewById(R.id.textview1);
               child.setVisibility(View.GONE);
               child=row.findViewById(R.id.throbber);
               child.setVisibility(View.VISIBLE);
               child.startAnimation(rotate);

               return(row);
              }

              @Override
              protected boolean cacheInBackground() {
               tempList.clear();
               int lastOffset = getLastOffset();
               if(lastOffset < LIST_SIZE){
                int limit = lastOffset + BATCH_SIZE;
                for(int i=(lastOffset+1); (i<=limit && i<LIST_SIZE); i++){
                 tempList.add(arrayEventsBeans.get(i));
                }    
                setLastOffset(limit);

                if(limit<LIST_SIZE){
                 return true;
                } else {
                 return false;
                }
               } else  {

                return false;
               }


              }


              @SuppressLint("NewApi")
            @Override
              protected void appendCachedData() {

               @SuppressWarnings("unchecked")
               ArrayAdapter<EventsBean> arrAdapterNew =        (ArrayAdapter<EventsBean>)getWrappedAdapter();

               int listLen = tempList.size();
               for(int i=0; i<listLen; i++){
                arrAdapterNew.addAll(tempList.get(i));
               }
              }
        }
    }

I have updated my code. I guess my problem now is with the custom adapter as it gives me multiple values after it reaches the end of the listview. Initially i do get 10 values but after the update it gets same 10 values again but the count reaches to 121.

Was it helpful?

Solution

Replace your init() as below,

 private void init() {
             new FetchEventValues().execute(); 
 }

and replace onPostExecute() with below,

@Override
        protected void onPostExecute(ArrayList<EventsBean> result) {
            super.onPostExecute(result);
            if (this.progressdialog.isShowing()) {
                this.progressdialog.dismiss();
            }

            // adapter = new SAmpleAdapter(EndlessAdapterExample.this,0,
            // arrayEventsBeans);

            // listview.setAdapter(adapter);

            LIST_SIZE = arrayEventsBeans.size();

                    for (int i = 0; i <= BATCH_SIZE; i++) {
                countriesSub.add(arrayEventsBeans.get(i));
            }
            setLastOffset(BATCH_SIZE);
            displayList(countriesSub);
        }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top