Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android PullToRefresh&x2B;EndlesAdapter提供IndexOutofBoundException_Android_Cwac Endless_Pull To Refresh - Fatal编程技术网

Android PullToRefresh&x2B;EndlesAdapter提供IndexOutofBoundException

Android PullToRefresh&x2B;EndlesAdapter提供IndexOutofBoundException,android,cwac-endless,pull-to-refresh,Android,Cwac Endless,Pull To Refresh,我尝试使用PulltoRefresh和EndlessAdapter,应用程序第一次运行时,列表加载得非常好,但是当它最终加载更多数据时,它崩溃了 库EndLessAdapter: 图书馆PulltoRefresh: 它在没有新鲜空气的情况下工作 该应用程序首次运行时,会调用: getPendingView MyAsyncTask 返回hasmoredata 调用postOnExecute-侦听器 打电话给我准备好了吗 设置DemoAdapter.notydatasetchanged 当它到达列表

我尝试使用PulltoRefresh和EndlessAdapter,应用程序第一次运行时,列表加载得非常好,但是当它最终加载更多数据时,它崩溃了

库EndLessAdapter:

图书馆PulltoRefresh:

它在没有新鲜空气的情况下工作

该应用程序首次运行时,会调用:

  • getPendingView
  • MyAsyncTask
  • 返回hasmoredata
  • 调用postOnExecute-侦听器
  • 打电话给我准备好了吗
  • 设置DemoAdapter.notydatasetchanged
  • 当它到达列表的末尾时,它调用:

  • getPendingView
  • MyAsyncTask
  • 返回hasmoredata
  • 给出IndexOutofBoundException
  • StackTrace:

    01-28 11:12:15.273: E/AndroidRuntime(12735): FATAL EXCEPTION: main
    01-28 11:12:15.273: E/AndroidRuntime(12735): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at java.util.ArrayList.get(ArrayList.java:311)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.AbsListView.obtainView(AbsListView.java:1592)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.ListView.makeAndAddView(ListView.java:1782)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.ListView.fillDown(ListView.java:705)
    
    public View instantiateItem(ViewGroup container, int position) {
        PullToRefreshListView plv = null;
        Context context = container.getContext();
    
        plv = (PullToRefreshListView) LayoutInflater.from(context).inflate(
                            R.layout.layout_listview_in_viewpager, container, false);
        endlessList = new ArrayList<HashMap<String, String>>(); 
        demoAdapter = new DemoAdapter(context, endlessList); 
        demoAdapter.setRunInBackground(false);
        plv.setAdapter(demoAdapter);
    
        plv.setOnRefreshListener(BaseSampleActivity.this);
    
        // Now just add ListView to ViewPager and return it
        container.addView(plv, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        return plv;
    }
    
    private class DemoAdapter extends EndlessAdapter implements IItemsReadyListener{
    
          private RotateAnimation rotate=null;
          private View pendingView=null;
          private ArrayList<HashMap<String, String>> data;
          private List<HashMap<String, String>> mOriginalNames;
          private boolean hasMoreData=true;
          private Context mContext;
    
          DemoAdapter(Context context, ArrayList<HashMap<String, String>> d) {
    
            super(new LazyAdapter(context, d));
            this.data = d;
            this.mContext = context;
            rotate=new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
                      0.5f, Animation.RELATIVE_TO_SELF,
                      0.5f);
    
            rotate.setRepeatMode(Animation.RESTART);
            rotate.setRepeatCount(Animation.INFINITE);
          }
    
          @Override
          protected View getPendingView(ViewGroup parent) {
              View row = LayoutInflater.from(mContext).inflate(R.layout.row, null);
    
                  View child=row.findViewById(android.R.id.text1);
    
                  child.setVisibility(View.GONE);
    
                  child=row.findViewById(R.id.throbber);
                  child.setVisibility(View.VISIBLE);
                  child.startAnimation(rotate);
                return(row);
          }
    
    
    
          @Override
          protected boolean cacheInBackground() {
            if(isNetworkOnline() == true){
              new MyAsyncTask(this, data.size()).execute();
            }
            return hasMoreData;
          }
    
          public void onItemsReady(ArrayList<HashMap<String, String>> data) {
              endlessList.addAll(data);
              demoAdapter.onDataReady();  // Tell the EndlessAdapter to remove it's pending
                                      // view and call notifyDataSetChanged()
              hasMoreData = endlessList.isEmpty();
            }
    
          @Override
          protected void appendCachedData() {
            if (getWrappedAdapter().getCount()<75) {
              @SuppressWarnings("unchecked")
              LazyAdapter a=(LazyAdapter)getWrappedAdapter();
              for (int i = 0; i < data.size(); i++) {
                  a.add(data.get(i));
              }
            }
          }
        }
    
    private static class MyAsyncTask extends AsyncTask<Void,Void,ArrayList<HashMap<String, String>>>{
            IItemsReadyListener listener;
    
            int startPoint;
    
            public MyAsyncTask(IItemsReadyListener listener, int startPoint) {
                // TODO Auto-generated constructor stub
                this.listener = listener;
                this.startPoint = startPoint;
            }
    
            @Override
            protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
    
                XMLParser parser = new XMLParser();
                String xml = parser.getXmlFromUrl(URL); // getting XML from URL
                Document doc = parser.getDomElement(xml); // getting DOM element
    
                NodeList nl = doc.getElementsByTagName(KEY_SONG);
                // looping through all song nodes <song>
                for (int i = 0; i < 10; i++) {
                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    // adding each child node to HashMap key => value
                    map.put(KEY_ID, parser.getValue(e, KEY_ID));
                    map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
                    map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
                    map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
                    map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
                    // adding HashList to ArrayList
                    endlessList.add(map);
                }
                return (endlessList);
            }
    
    
    
    
            @Override
            protected void onPostExecute(ArrayList<HashMap<String, String>> result)
            {
                listener.onItemsReady(endlessList);
                 // Getting adapter by passing xml data ArrayList
                if (demoAdapter != null) 
                {
                    demoAdapter.notifyDataSetChanged();
                }
    
            }
    }
    
    内部PullToRefreshListInviewPage示例:

    01-28 11:12:15.273: E/AndroidRuntime(12735): FATAL EXCEPTION: main
    01-28 11:12:15.273: E/AndroidRuntime(12735): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at java.util.ArrayList.get(ArrayList.java:311)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.AbsListView.obtainView(AbsListView.java:1592)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.ListView.makeAndAddView(ListView.java:1782)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.ListView.fillDown(ListView.java:705)
    
    public View instantiateItem(ViewGroup container, int position) {
        PullToRefreshListView plv = null;
        Context context = container.getContext();
    
        plv = (PullToRefreshListView) LayoutInflater.from(context).inflate(
                            R.layout.layout_listview_in_viewpager, container, false);
        endlessList = new ArrayList<HashMap<String, String>>(); 
        demoAdapter = new DemoAdapter(context, endlessList); 
        demoAdapter.setRunInBackground(false);
        plv.setAdapter(demoAdapter);
    
        plv.setOnRefreshListener(BaseSampleActivity.this);
    
        // Now just add ListView to ViewPager and return it
        container.addView(plv, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        return plv;
    }
    
    private class DemoAdapter extends EndlessAdapter implements IItemsReadyListener{
    
          private RotateAnimation rotate=null;
          private View pendingView=null;
          private ArrayList<HashMap<String, String>> data;
          private List<HashMap<String, String>> mOriginalNames;
          private boolean hasMoreData=true;
          private Context mContext;
    
          DemoAdapter(Context context, ArrayList<HashMap<String, String>> d) {
    
            super(new LazyAdapter(context, d));
            this.data = d;
            this.mContext = context;
            rotate=new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
                      0.5f, Animation.RELATIVE_TO_SELF,
                      0.5f);
    
            rotate.setRepeatMode(Animation.RESTART);
            rotate.setRepeatCount(Animation.INFINITE);
          }
    
          @Override
          protected View getPendingView(ViewGroup parent) {
              View row = LayoutInflater.from(mContext).inflate(R.layout.row, null);
    
                  View child=row.findViewById(android.R.id.text1);
    
                  child.setVisibility(View.GONE);
    
                  child=row.findViewById(R.id.throbber);
                  child.setVisibility(View.VISIBLE);
                  child.startAnimation(rotate);
                return(row);
          }
    
    
    
          @Override
          protected boolean cacheInBackground() {
            if(isNetworkOnline() == true){
              new MyAsyncTask(this, data.size()).execute();
            }
            return hasMoreData;
          }
    
          public void onItemsReady(ArrayList<HashMap<String, String>> data) {
              endlessList.addAll(data);
              demoAdapter.onDataReady();  // Tell the EndlessAdapter to remove it's pending
                                      // view and call notifyDataSetChanged()
              hasMoreData = endlessList.isEmpty();
            }
    
          @Override
          protected void appendCachedData() {
            if (getWrappedAdapter().getCount()<75) {
              @SuppressWarnings("unchecked")
              LazyAdapter a=(LazyAdapter)getWrappedAdapter();
              for (int i = 0; i < data.size(); i++) {
                  a.add(data.get(i));
              }
            }
          }
        }
    
    private static class MyAsyncTask extends AsyncTask<Void,Void,ArrayList<HashMap<String, String>>>{
            IItemsReadyListener listener;
    
            int startPoint;
    
            public MyAsyncTask(IItemsReadyListener listener, int startPoint) {
                // TODO Auto-generated constructor stub
                this.listener = listener;
                this.startPoint = startPoint;
            }
    
            @Override
            protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
    
                XMLParser parser = new XMLParser();
                String xml = parser.getXmlFromUrl(URL); // getting XML from URL
                Document doc = parser.getDomElement(xml); // getting DOM element
    
                NodeList nl = doc.getElementsByTagName(KEY_SONG);
                // looping through all song nodes <song>
                for (int i = 0; i < 10; i++) {
                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    // adding each child node to HashMap key => value
                    map.put(KEY_ID, parser.getValue(e, KEY_ID));
                    map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
                    map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
                    map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
                    map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
                    // adding HashList to ArrayList
                    endlessList.add(map);
                }
                return (endlessList);
            }
    
    
    
    
            @Override
            protected void onPostExecute(ArrayList<HashMap<String, String>> result)
            {
                listener.onItemsReady(endlessList);
                 // Getting adapter by passing xml data ArrayList
                if (demoAdapter != null) 
                {
                    demoAdapter.notifyDataSetChanged();
                }
    
            }
    }
    
    公共视图实例化项(视图组容器,int位置){
    PullToRefreshListView plv=null;
    Context=container.getContext();
    plv=(PullToRefreshListView)LayoutFlater.from(上下文)。充气(
    R.layout.layout_listview_in_viewpager,container,false);
    endlessList=新的ArrayList();
    demoAdapter=新的demoAdapter(上下文,endlessList);
    demoAdapter.setRunInBackground(假);
    plv.setAdapter(demoAdapter);
    setOnRefreshListener(BaseSampleActivity.this);
    //现在只需将ListView添加到ViewPager并返回它
    container.addView(plv、LayoutParams.MATCH\u父级、LayoutParams.MATCH\u父级);
    返回plv;
    }
    
    EndLessAdapter:

    01-28 11:12:15.273: E/AndroidRuntime(12735): FATAL EXCEPTION: main
    01-28 11:12:15.273: E/AndroidRuntime(12735): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at java.util.ArrayList.get(ArrayList.java:311)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.AbsListView.obtainView(AbsListView.java:1592)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.ListView.makeAndAddView(ListView.java:1782)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.ListView.fillDown(ListView.java:705)
    
    public View instantiateItem(ViewGroup container, int position) {
        PullToRefreshListView plv = null;
        Context context = container.getContext();
    
        plv = (PullToRefreshListView) LayoutInflater.from(context).inflate(
                            R.layout.layout_listview_in_viewpager, container, false);
        endlessList = new ArrayList<HashMap<String, String>>(); 
        demoAdapter = new DemoAdapter(context, endlessList); 
        demoAdapter.setRunInBackground(false);
        plv.setAdapter(demoAdapter);
    
        plv.setOnRefreshListener(BaseSampleActivity.this);
    
        // Now just add ListView to ViewPager and return it
        container.addView(plv, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        return plv;
    }
    
    private class DemoAdapter extends EndlessAdapter implements IItemsReadyListener{
    
          private RotateAnimation rotate=null;
          private View pendingView=null;
          private ArrayList<HashMap<String, String>> data;
          private List<HashMap<String, String>> mOriginalNames;
          private boolean hasMoreData=true;
          private Context mContext;
    
          DemoAdapter(Context context, ArrayList<HashMap<String, String>> d) {
    
            super(new LazyAdapter(context, d));
            this.data = d;
            this.mContext = context;
            rotate=new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
                      0.5f, Animation.RELATIVE_TO_SELF,
                      0.5f);
    
            rotate.setRepeatMode(Animation.RESTART);
            rotate.setRepeatCount(Animation.INFINITE);
          }
    
          @Override
          protected View getPendingView(ViewGroup parent) {
              View row = LayoutInflater.from(mContext).inflate(R.layout.row, null);
    
                  View child=row.findViewById(android.R.id.text1);
    
                  child.setVisibility(View.GONE);
    
                  child=row.findViewById(R.id.throbber);
                  child.setVisibility(View.VISIBLE);
                  child.startAnimation(rotate);
                return(row);
          }
    
    
    
          @Override
          protected boolean cacheInBackground() {
            if(isNetworkOnline() == true){
              new MyAsyncTask(this, data.size()).execute();
            }
            return hasMoreData;
          }
    
          public void onItemsReady(ArrayList<HashMap<String, String>> data) {
              endlessList.addAll(data);
              demoAdapter.onDataReady();  // Tell the EndlessAdapter to remove it's pending
                                      // view and call notifyDataSetChanged()
              hasMoreData = endlessList.isEmpty();
            }
    
          @Override
          protected void appendCachedData() {
            if (getWrappedAdapter().getCount()<75) {
              @SuppressWarnings("unchecked")
              LazyAdapter a=(LazyAdapter)getWrappedAdapter();
              for (int i = 0; i < data.size(); i++) {
                  a.add(data.get(i));
              }
            }
          }
        }
    
    private static class MyAsyncTask extends AsyncTask<Void,Void,ArrayList<HashMap<String, String>>>{
            IItemsReadyListener listener;
    
            int startPoint;
    
            public MyAsyncTask(IItemsReadyListener listener, int startPoint) {
                // TODO Auto-generated constructor stub
                this.listener = listener;
                this.startPoint = startPoint;
            }
    
            @Override
            protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
    
                XMLParser parser = new XMLParser();
                String xml = parser.getXmlFromUrl(URL); // getting XML from URL
                Document doc = parser.getDomElement(xml); // getting DOM element
    
                NodeList nl = doc.getElementsByTagName(KEY_SONG);
                // looping through all song nodes <song>
                for (int i = 0; i < 10; i++) {
                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    // adding each child node to HashMap key => value
                    map.put(KEY_ID, parser.getValue(e, KEY_ID));
                    map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
                    map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
                    map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
                    map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
                    // adding HashList to ArrayList
                    endlessList.add(map);
                }
                return (endlessList);
            }
    
    
    
    
            @Override
            protected void onPostExecute(ArrayList<HashMap<String, String>> result)
            {
                listener.onItemsReady(endlessList);
                 // Getting adapter by passing xml data ArrayList
                if (demoAdapter != null) 
                {
                    demoAdapter.notifyDataSetChanged();
                }
    
            }
    }
    
    私有类DemoAdapter扩展EndlesAdapter实现IItemsReadyListener{
    私有RotateAimation rotate=null;
    私有视图pendingView=null;
    私有数组列表数据;
    私人名单姓名;
    私有布尔hasMoreData=true;
    私有上下文;
    DemoAdapter(上下文,ArrayList d){
    超级(新懒散适配器(上下文,d));
    这个数据=d;
    this.mContext=上下文;
    旋转=新的旋转动画(0f,360f,Animation.RELATIVE\u TO\u SELF,
    0.5f,动画。相对于自身,
    0.5f);
    rotate.setRepeatMode(动画.重新启动);
    rotate.setRepeatCount(Animation.INFINITE);
    }
    @凌驾
    受保护的视图getPendingView(视图组父视图){
    查看行=LayoutInflater.from(mContext).充气(R.layout.row,null);
    View child=row.findviewbyd(android.R.id.text1);
    setVisibility(View.GONE);
    child=row.findViewById(R.id.throbber);
    setVisibility(View.VISIBLE);
    child.startAnimation(旋转);
    返回(行);
    }
    @凌驾
    受保护的布尔缓存背景(){
    如果(isNetworkOnline()==true){
    新建MyAsyncTask(this,data.size()).execute();
    }
    返回hasMoreData;
    }
    public-msready(ArrayList数据){
    endlessList.addAll(数据);
    demoAdapter.onDataReady();//告诉EndlesAdapter删除它的挂起状态
    //查看并调用notifyDataSetChanged()
    hasMoreData=endlessList.isEmpty();
    }
    @凌驾
    受保护的无效appendCachedData(){
    如果(getWrappedAdapter().getCount()值
    put(KEY_ID,parser.getValue(e,KEY_ID));
    put(KEY_TITLE,parser.getValue(e,KEY_TITLE));
    put(KEY_-ARTIST,parser.getValue(e,KEY_-ARTIST));
    put(KEY_DURATION,parser.getValue(e,KEY_DURATION));
    put(KEY_THUMB_URL,parser.getValue(e,KEY_THUMB_URL));
    //将哈希列表添加到ArrayList
    endlessList.add(地图);
    }
    返回(endlessList);
    }
    @凌驾
    受保护的void onPostExecute(ArrayList结果)
    {
    listener.onItemsReady(endlessList);
    //通过传递xml数据ArrayList获取适配器
    如果(demoAdapter!=null)
    {
    demoAdapter.notifyDataSetChanged();
    }
    }
    }
    
    更新:

    01-28 11:12:15.273: E/AndroidRuntime(12735): FATAL EXCEPTION: main
    01-28 11:12:15.273: E/AndroidRuntime(12735): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at java.util.ArrayList.get(ArrayList.java:311)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.AbsListView.obtainView(AbsListView.java:1592)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.ListView.makeAndAddView(ListView.java:1782)
    01-28 11:12:15.273: E/AndroidRuntime(12735):    at android.widget.ListView.fillDown(ListView.java:705)
    
    public View instantiateItem(ViewGroup container, int position) {
        PullToRefreshListView plv = null;
        Context context = container.getContext();
    
        plv = (PullToRefreshListView) LayoutInflater.from(context).inflate(
                            R.layout.layout_listview_in_viewpager, container, false);
        endlessList = new ArrayList<HashMap<String, String>>(); 
        demoAdapter = new DemoAdapter(context, endlessList); 
        demoAdapter.setRunInBackground(false);
        plv.setAdapter(demoAdapter);
    
        plv.setOnRefreshListener(BaseSampleActivity.this);
    
        // Now just add ListView to ViewPager and return it
        container.addView(plv, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        return plv;
    }
    
    private class DemoAdapter extends EndlessAdapter implements IItemsReadyListener{
    
          private RotateAnimation rotate=null;
          private View pendingView=null;
          private ArrayList<HashMap<String, String>> data;
          private List<HashMap<String, String>> mOriginalNames;
          private boolean hasMoreData=true;
          private Context mContext;
    
          DemoAdapter(Context context, ArrayList<HashMap<String, String>> d) {
    
            super(new LazyAdapter(context, d));
            this.data = d;
            this.mContext = context;
            rotate=new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
                      0.5f, Animation.RELATIVE_TO_SELF,
                      0.5f);
    
            rotate.setRepeatMode(Animation.RESTART);
            rotate.setRepeatCount(Animation.INFINITE);
          }
    
          @Override
          protected View getPendingView(ViewGroup parent) {
              View row = LayoutInflater.from(mContext).inflate(R.layout.row, null);
    
                  View child=row.findViewById(android.R.id.text1);
    
                  child.setVisibility(View.GONE);
    
                  child=row.findViewById(R.id.throbber);
                  child.setVisibility(View.VISIBLE);
                  child.startAnimation(rotate);
                return(row);
          }
    
    
    
          @Override
          protected boolean cacheInBackground() {
            if(isNetworkOnline() == true){
              new MyAsyncTask(this, data.size()).execute();
            }
            return hasMoreData;
          }
    
          public void onItemsReady(ArrayList<HashMap<String, String>> data) {
              endlessList.addAll(data);
              demoAdapter.onDataReady();  // Tell the EndlessAdapter to remove it's pending
                                      // view and call notifyDataSetChanged()
              hasMoreData = endlessList.isEmpty();
            }
    
          @Override
          protected void appendCachedData() {
            if (getWrappedAdapter().getCount()<75) {
              @SuppressWarnings("unchecked")
              LazyAdapter a=(LazyAdapter)getWrappedAdapter();
              for (int i = 0; i < data.size(); i++) {
                  a.add(data.get(i));
              }
            }
          }
        }
    
    private static class MyAsyncTask extends AsyncTask<Void,Void,ArrayList<HashMap<String, String>>>{
            IItemsReadyListener listener;
    
            int startPoint;
    
            public MyAsyncTask(IItemsReadyListener listener, int startPoint) {
                // TODO Auto-generated constructor stub
                this.listener = listener;
                this.startPoint = startPoint;
            }
    
            @Override
            protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
    
                XMLParser parser = new XMLParser();
                String xml = parser.getXmlFromUrl(URL); // getting XML from URL
                Document doc = parser.getDomElement(xml); // getting DOM element
    
                NodeList nl = doc.getElementsByTagName(KEY_SONG);
                // looping through all song nodes <song>
                for (int i = 0; i < 10; i++) {
                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    // adding each child node to HashMap key => value
                    map.put(KEY_ID, parser.getValue(e, KEY_ID));
                    map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
                    map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
                    map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
                    map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
                    // adding HashList to ArrayList
                    endlessList.add(map);
                }
                return (endlessList);
            }
    
    
    
    
            @Override
            protected void onPostExecute(ArrayList<HashMap<String, String>> result)
            {
                listener.onItemsReady(endlessList);
                 // Getting adapter by passing xml data ArrayList
                if (demoAdapter != null) 
                {
                    demoAdapter.notifyDataSetChanged();
                }
    
            }
    }
    
    我只是改变一下:

          @Override
          protected boolean cacheInBackground() throws Exception {
            if(isNetworkOnline() == true){
              new MyAsyncTask(this).execute();
            }
            if (getWrappedAdapter().getCount()<75) {
                return(true);
              }
            throw new Exception("Gadzooks!");
    
            }
    
    @覆盖
    受保护的布尔cacheInBackground()引发异常{
    如果(isNetworkOnline()==true){
    新建MyAsyncTask(this.execute();
    }
    
    如果(getWrappedAdapter().getCount()临时删除
    EndlessAdapter
    ,只使用PullToRefresh工具。根据您的异常情况,我怀疑您的问题仍会存在。没有EndlessAdapter,它可以正常工作,在调试模式下,我看不到listener.onimsready(endlessList);需要加载更多数据时被调用我只是在程序执行时一步一步地添加了。然后可能
    EndlessAdapter
    与拉入刷新代码不兼容。我不喜欢拉入刷新(一般来说,我没有研究过这个具体的实现),所以我不想花太多时间在抓挠上。欢迎您提交拉取请求或项目问题,指出我可以进行的更改,以使
    EndlessAdapter
    更好地使用此拉取来刷新代码,但我不知道
    EndlessAdapter
    本身会是什么原因我刚刚提交了一个关于这个项目的问题,我希望你能和PulltoRefresh一起工作。谢谢