NullPointerException using EndlessAdapter with SimpleAdapter
        Posted  
        
            by android_dev
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by android_dev
        
        
        
        Published on 2010-03-25T22:47:41Z
        Indexed on 
            2010/03/25
            22:53 UTC
        
        
        Read the original article
        Hit count: 325
        
Hello, I am using EndlessAdapter from commonsguy with a SimpleAdapter. I can load data when I make a scroll down without problems, but I have a NullPointerException when I make a scroll up. The problem is in the method
    @Override
 public View getView(int position, View convertView,ViewGroup parent) {
  return wrapped.getView(position, convertView, parent);
 }
from the class AdapterWrapper. 
The call to wrapped.getView(position, convertView,parent) raises the exception and I don´t know why.
This is my implementation of EndlessAdapter:
//Inner class in SearchTextActivity
    class DemoAdapter extends EndlessAdapter {
      private RotateAnimation rotate = null;
      DemoAdapter(ArrayList<HashMap<String, String>> result) {
       super(new SimpleAdapter(SearchTracksActivity.this,
         result,
         R.layout.textlist_item,
         PROJECTION_COLUMNS,
         VIEW_MAPPINGS));
       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.textlist_item, null);
       View child=row.findViewById(R.id.title);
       child.setVisibility(View.GONE);
       child=row.findViewById(R.id.username);
       child.setVisibility(View.GONE);
       child=row.findViewById(R.id.throbber);
       child.setVisibility(View.VISIBLE);
       child.startAnimation(rotate);
       return row;
      }
      @Override
      @SuppressWarnings("unchecked")
      protected void rebindPendingView(int position, View row) {
       HashMap<String, String> res = (HashMap<String, String>)getWrappedAdapter().getItem(position);
       View child=row.findViewById(R.id.title);
       ((TextView)child).setText(res.get("title"));
       child.setVisibility(View.VISIBLE);    
       child=row.findViewById(R.id.username);
       ((TextView)child).setText(res.get("username"));
       child.setVisibility(View.VISIBLE);
       ImageView throbber=(ImageView)row.findViewById(R.id.throbber);
       throbber.setVisibility(View.GONE);
       throbber.clearAnimation();
      }
      boolean mFinal = true;
      @Override
      protected boolean cacheInBackground() {
       EditText searchText = (EditText)findViewById(R.id.searchText);
       String textToSearch = searchText.getText().toString();
       Util.getSc().searchText(textToSearch , offset, limit, new ResultListener<ArrayList<Text>>() {
        @Override
        public void onError(Exception e) {
         e.toString();
         mFinal = false;
        }
        @Override
        public void onSuccess(ArrayList<Text> result) {
         if(result.size() == 0){
          mFinal = false;
         }else{
          texts.addAll(result);
          offset++;
         }
        }
       });
       return mFinal;
      }
      @Override
      protected void appendCachedData() {
       for(Text text : texts){
        result.add(text.getMapValues());
       }
       texts.clear();
      }
     }
And I use it this way:
public class SearchTextActivity extends AbstractListActivity {
 private static final String[] PROJECTION_COLUMNS = new String[] {
  TextStore.Text.TITLE,
  TextStore.Text.USER_NAME};
 private static final int[] VIEW_MAPPINGS = new int[] {
  R.id.Text_title,
  R.id.Text_username};
 ArrayList<HashMap<String, String>> result;
 static ArrayList<Text> texts;
 static int offset = 0;
 static int limit = 1;
 @Override
 void onAbstractCreate(Bundle savedInstance) {
  setContentView(R.layout.search_tracks);
  setupViews();
 }
 private void setupViews() {
  ImageButton searchButton = (ImageButton)findViewById(R.id.searchButton);
  updateView();
 }
 SimpleAdapter adapter;
 void updateView(){
  if(result == null) {
   result = new ArrayList<HashMap<String, String>>();
  }
  if(tracks == null) {
   texts = new ArrayList<Text>();
  }
 }
 public void sendQuery(View v){
  offset = 0;
  texts.clear();
  result.clear();
  setListAdapter(new DemoAdapter(result));
 }
}
Does anybody knows what could be the problem?
Thank you in advance
© Stack Overflow or respective owner