2013-11-25 25 views
0

我想在應用程序代碼中使用無盡的列表視圖適配器,但一些如何我只是無法在列表視圖中看到任何值。使用普通的listview適配器時,我的代碼運行得非常好。我試圖使用CWAC-無盡的adpater。我可以得到如何使用我的asynctask來運行它,因爲它在播放後會給我留下空白的屏幕。 下面是我的代碼。無盡的適配器不顯示在列表視圖中的任何值

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)); 
       } 
       } 
     } 
    } 

我已更新我的代碼。我想我現在的問題是使用自定義適配器,因爲它在到達listview結尾後給了我多個值。最初,我得到10個值,但更新後,再次得到相同的10個值,但數達到121

+0

你是否檢查你的'arrayEventsBeans'是否填充了你的響應值 – SathishKumar

+0

是的它是因爲我得到我的迴應只是當我添加無盡的適配器我看到列表視圖 –

+0

我想我的錯誤是有些在這裏DemoAdapter(){超級(新SAmpleAdapter(EndlessAdapterExample.this,R.layout.sample_endless,countriesSub));在這一行 –

回答

0

更換你init()如下,

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

和替換onPostExecute()下面,

@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); 
     } 
+0

我只是檢查它並回復給你 –

+0

嗨,謝謝你的工作,但我arraylist重複值很多次 –

+0

在這裏arrayEventsBeans值是正確的,但適配器arraylist值不來作爲arrayEventsBeans大小 –

相關問題