2010-03-25 6 views
0

J'utilise EndlessAdapter de commonsguy avec un SimpleAdapter. Je peux charger des données quand je fais défiler vers le bas sans problèmes, mais j'ai une exception NullPointerException quand je fais défiler vers le haut. Le problème est dans la méthodeNullPointerException utilisant EndlessAdapter avec SimpleAdapter

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

de la classe AdapterWrapper.

L'appel à wrapped.getView(position, convertView,parent) déclenche l'exception et je ne sais pas pourquoi.

Ceci est ma mise en œuvre de 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(); 
     } 
    } 

Et je l'utilise de cette façon:

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

Est-ce que quelqu'un sait ce qui pourrait être le problème?

+0

Je n'ai pas essayé SimpleAdapter avec EndlessAdapter. Si 'NullPointerException' est directement sur la ligne' wrapped.getView (position, convertView, parent) ', alors' wrapped' doit être 'null'. – CommonsWare

+0

Merci pour votre réponse, mais j'ai vérifié que 'enveloppé' n'est pas nul. L'erreur provient de wrapped.getView (position, convertView, parent). C'est dans le SimpleAdapter. Peut-être est-ce un problème lié à l'index 'position', mais il y a une vue sur cette position. Je ne sais pas ce qui se passe là-bas. – ahmontero

Répondre

1

Il se trouve dans le SimpleAdapter.

Je commencerais en se débarrassant de la EndlessAdapter et juste votre liste soit sur la SimpleAdapter.

Si cela fonctionne, il peut y avoir un bug dans la façon dont EndlessAdapter fonctionne avec l'adaptateur qu'il enveloppe - dans ce cas, j'aurais besoin d'un exemple de projet qui montre l'erreur.

Si le SimpleAdapter échoue sans le EndlessAdapter, vous devrez faire plus d'investigations sur la façon dont vous configurez le SimpleAdapter.

+0

J'ai testé et j'ai pu recréer l'erreur. Si j'utilise SimpleAdpater, tout va bien, mais si j'utilise EndlessAdapter avec SimpleAdapter, j'ai le problème décrit plus haut. J'ai fait un projet de démonstration dans Eclipse avec l'erreur ici: http://bit.ly/alTapV Merci pour votre aide – ahmontero

+0

'EndlessAdapter' ne fonctionnera pas avec' SimpleAdapter' de sitôt. Je ne recommande pas 'SimpleAdapter', point. Il n'y a aucun problème que 'SimpleAdapter' résout que' ArrayAdapter' ne peut pas résoudre plus efficacement (moins de copie de données = moins de temps CPU, moins de garbage collection, etc.). – CommonsWare

+0

Ok, je comprends. Ensuite, je vais essayer d'utiliser ArrayAdapter. Merci pour votre temps. – ahmontero

Questions connexes