NullPointerException с использованием EndlessAdapter с SimpleAdapter

StackOverflow https://stackoverflow.com/questions/2519992

  •  22-09-2019
  •  | 
  •  

Вопрос

Я использую EndlessAdapter от commonsguy с SimpleAdapter.Я могу без проблем загружать данные при прокрутке вниз, но при прокрутке вверх у меня возникает исключение NullPointerException.Проблема в методе

    @Override
 public View getView(int position, View convertView,ViewGroup parent) {
  return wrapped.getView(position, convertView, parent);
 }

из класса AdapterWrapper.

Звонок в wrapped.getView(position, convertView,parent) вызывает исключение, и я не знаю, почему.

Это моя реализация 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();
      }
     }

И я использую это следующим образом:

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

Кто-нибудь знает, в чем может быть проблема?

Это было полезно?

Решение

Он находится внутри SimpleAdapter.

Я бы начал с избавления от EndlessAdapter и просто пусть ваш список будет в SimpleAdapter.

Если это работает, возможно, в этом есть ошибка. EndlessAdapter работает с адаптером, который он обертывает - в этом случае мне понадобится пример проекта, демонстрирующий ошибку.

Если SimpleAdapter не получается без EndlessAdapter, вам нужно будет подробнее изучить, как вы настраиваете SimpleAdapter.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top