Бесконечные адаптеры данных дописывают сбой в Android - PullRequest
0 голосов
/ 07 марта 2012

Я использую бесконечный адаптер в своем приложении, первоначально только 25 данных отображаются в виде списка, когда он достигает конца, мне нужно добавить следующий 25 объект.

Для этого я использую бесконечный адаптер, создав его как отдельный класси инициализируйте адаптер следующим образом:

public BikeEndlessAdapter(Context c, ArrayList<BikeSearchResultsIdentifier> results,Activity test, String intentData23) {

    super(getAdapter(c,
            R.layout.search_bike, results, test));
    re=c;
    intentData=intentData23;

    ter=test.getLayoutInflater();   
      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);
    // TODO Auto-generated constructor stub
}
 static ListAdapter getAdapter(Context c, int searchBike,
        ArrayList<BikeSearchResultsIdentifier> results, Activity test) {
    // TODO Auto-generated method stub
        bikeItemList=results;
    adapter=new BikeListAdapter(c,
            R.layout.search_bike, bikeItemList, test);
    return adapter;
}

, где BikeListadapter - это другой класс адаптера ArrayList, поскольку каждая строка имеет разные свойства.

При первой загрузке данных используется бесконечный адаптер, сначала25 dataObject был успешно показан в списке с использованием следующего кода

        final ListView bikeListView = (ListView) findViewById(R.id.list_bike);

    bikeListView.setAdapter(new BikeEndlessAdapter(BikesList.this, bikeItemList, this,intentData));

в моем классе BikeList.

Когда он достигает конца списка (то есть 25-й строки), соответствующая бесконечная анимация адаптера имеетпоказано, затем выполняется метод cacheInBackground. В этом методе я нажал на сервис, чтобы получить следующий набор добавлений, который также успешно выполнен.

Но когда я пытаюсь добавить его, выдается ошибка,

@Override
protected void appendCachedData() {
    // TODO Auto-generated method stub

    //@SuppressWarnings("unchecked")
    ArrayAdapter<BikeSearchResultsIdentifier> adapter=(ArrayAdapter<BikeSearchResultsIdentifier>)getWrappedAdapter();
    System.out.println("Wrapper class: "+adapter);
    for(int i=0;i<bikeItemList.size();i++){
        adapter.add(bikeItemList.get(i));
    }
    adapter.notifyDataSetChanged();
}

это ошибка журнала, у меня есть:

   03-07 15:52:02.292: E/AndroidRuntime(762): java.lang.NullPointerException
03-07 15:52:02.292: E/AndroidRuntime(762):  at com.InternetGMBH.ThousandPS.Activities.BikeEndlessAdapter.appendCachedData(BikeEndlessAdapter.java:93)
03-07 15:52:02.292: E/AndroidRuntime(762):  at com.commonsware.cwac.endless.EndlessAdapter$AppendTask.onPostExecute(EndlessAdapter.java:179)
03-07 15:52:02.292: E/AndroidRuntime(762):  at com.commonsware.cwac.endless.EndlessAdapter$AppendTask.onPostExecute(EndlessAdapter.java:1)
03-07 15:52:02.292: E/AndroidRuntime(762):  at android.os.AsyncTask.finish(AsyncTask.java:417)
03-07 15:52:02.292: E/AndroidRuntime(762):  at android.os.AsyncTask.access$300(AsyncTask.java:127)
03-07 15:52:02.292: E/AndroidRuntime(762):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
03-07 15:52:02.292: E/AndroidRuntime(762):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 15:52:02.292: E/AndroidRuntime(762):  at android.os.Looper.loop(Looper.java:123)
03-07 15:52:02.292: E/AndroidRuntime(762):  at android.app.ActivityThread.main(ActivityThread.java:4363)
03-07 15:52:02.292: E/AndroidRuntime(762):  at java.lang.reflect.Method.invokeNative(Native Method)
03-07 15:52:02.292: E/AndroidRuntime(762):  at java.lang.reflect.Method.invoke(Method.java:521)
03-07 15:52:02.292: E/AndroidRuntime(762):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-07 15:52:02.292: E/AndroidRuntime(762):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-07 15:52:02.292: E/AndroidRuntime(762):  at dalvik.system.NativeStart.main(Native Method)

1 Ответ

0 голосов
/ 08 марта 2012

Я обнаружил проблему, проблему в моем BikeListAdapter при получении и установке значения в виде списка,

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        **convertView = mInflater.inflate(R.layout.search_bike,null);**
        holder = new ViewHolder();
        holder.title = (TextView) convertView.findViewById(R.id.title);
        holder.model=(TextView)convertView.findViewById(R.id.model);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }


    holder.title.setText(bikeSearchResults.get(position).getBikeBrand());
    holder.model.setText(bikeSearchResults.get(position).getModel());

    return convertView;
}

в этом convertView = mInflater.inflate (R.layout.search_bike, null);я допустил ошибку, используя неверный контекст, затем исправил его, используя следующий код:

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.search_bike,null);

теперь бесконечный адаптер с пользовательскими объектами работает нормально.

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