NullPointerException с использованием EndlessAdapter с SimpleAdapter - PullRequest
0 голосов
/ 26 марта 2010

Я использую 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));
 }
}

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

1 Ответ

1 голос
/ 26 марта 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...