Note that there are some explanatory texts on larger screens.

plurals
  1. POAsynTask with Endless Listview Scroll in android
    primarykey
    data
    text
    <p>I am creating an application where in i need to have endless scrolling listview. I dnt want to use any library in my application. I have seen some examples on line that help in achieving such listview,but my doubt is how can i have an endless listview when my data are coming from server and are getting parsed in the Asynctask. How can i load 10 items at a time from my asynctask on scroll? I want to know to implement a endless listview on asyntask. Do i call my asynctask in the onScroll() or not???</p> <pre><code>public class EndlessScrollExample 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&lt;EventsBean&gt; arrayEventsBeans = new ArrayList&lt;EventsBean&gt;(); ArrayList&lt;DateBean&gt; sortArray = new ArrayList&lt;DateBean&gt;(); public SAmpleAdapter adapter; public ImageView img_menu,img_calender; public ListView listview; public EventsBean eventsbean; int counter = 0; int currentPage = 0; FetchEventValues fetchValues; @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 &amp;&amp; id == null &amp;&amp; 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 = "my Url"; } } catch (NullPointerException e) { Log.i(TAG, "User Not Logged IN " + e.getMessage()); // TODO Auto-generated catch block e.printStackTrace(); } fetchValues = new FetchEventValues(); fetchValues.execute(); listview = getListView(); listview.setOnScrollListener(new EndlessScrollListener()); } // AsyncTask Class called in the OnCreate() when the activity is first started. public class FetchEventValues extends AsyncTask&lt;Integer, Integer, Integer&gt; { ProgressDialog progressdialog = new ProgressDialog(EndlessScrollExample.this); @SuppressLint("SimpleDateFormat") @SuppressWarnings("unchecked") @Override protected Integer doInBackground(Integer... params) { currentPage++; // Creating JSON Parser instance JsonParser jParser = new JsonParser(); // getting JSON string from URL //arrayEventsBeans.clear(); 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 &lt; jsonAarray.length() ; j++) { if(!jsonAarray.getJSONObject(j).isNull(Constants.LOCATION_CITY) &amp;&amp; !jsonAarray.getJSONObject(j).isNull(Constants.LOCATION_STATE) &amp;&amp; !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"); arrayEventsBeans = new ArrayList&lt;EventsBean&gt;(); // @SuppressWarnings("unchecked") Iterator&lt;Object&gt; keys = eventobject.keys(); while (keys.hasNext()) { String datestring = String.valueOf(keys.next()); if (datestring.trim().length() &gt; 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(); /// Calendar alldates1 = Calendar.getInstance(); JSONArray jsonArray = eventobject.getJSONArray(dateKey); System.out.println(" --"+jsonArray); for (int i = 0 ; i &lt; jsonArray.length() ; i++) { if ((today.compareTo(alldates) &lt; 0 || (today.compareTo(alldates)== 0))) // if (alldates1 &gt; cal) alldates.getTime() &gt;= today.getTime() { String currentTimeStr = "7:04 PM"; Date userDate = new Date(); String userDateWithoutTime = new SimpleDateFormat("yyyyMMdd").format(userDate); String currentDateStr = userDateWithoutTime + " " + currentTimeStr; Date currentDate = new SimpleDateFormat("yyyyMMdd h:mm a").parse(currentDateStr); if (userDate.compareTo(currentDate) &gt;= 0) { System.out.println(userDate + " is greater than or equal to " + currentDate); } else { System.out.println(userDate + " is less than " + currentDate); } JSONObject jsonobjname = jsonArray.getJSONObject(i); EventsBean 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){ Log.e(TAG , "Exception Occured:" + e.getMessage()); } return null; } class CompareDate implements Comparator&lt;DateBean&gt;{ @Override public int compare(DateBean d1, DateBean d2) { return d1.getDate().compareTo(d2.getDate()); } } @Override protected void onProgressUpdate(Integer... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); } @Override protected void onPostExecute(Integer result) { // TODO Auto-generated method stub super.onPostExecute(result); if(this.progressdialog.isShowing()) { this.progressdialog.dismiss(); } if(adapter == null) { adapter = new SAmpleAdapter(EndlessScrollExample.this, 0, arrayEventsBeans); listview.setAdapter(adapter); } else { adapter.notifyDataSetChanged(); } //currentPage++; } @Override protected void onPreExecute() { super.onPreExecute(); this.progressdialog.setMessage("Loading...."); this.progressdialog.setCanceledOnTouchOutside(false); this.progressdialog.show(); } public int setPage(int currentPage) { return currentPage; // TODO Auto-generated method stub } } public class EndlessScrollListener implements OnScrollListener { private int visibleThreshold = 0; private int currentPage = 0; public EndlessScrollListener() { } public EndlessScrollListener(int visibleThreshold) { this.visibleThreshold = visibleThreshold; } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == SCROLL_STATE_IDLE) { if (listview.getLastVisiblePosition() &gt;= listview.getCount() - visibleThreshold) { currentPage++; fetchValues.setPage(currentPage); fetchValues.execute(); } } } } } </code></pre> <p>Thanks in advance. </p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload