Я получаю недопустимый индекс 0, размер ошибки 0 и не может понять, где это происходит. Я запускаю отладчик и не могу его разместить. Все, что я знаю, это то, что происходит в моем коде раньше и что произойдет после. Ниже я разместил logcat, код, который заканчивается перед сбоем, и что будет работать после.Android: неверный индекс 0, размер равен 0. ГДЕ?
Вот LogCat:
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
at android.widget.ListView.dispatchDraw(ListView.java:3307)
at android.view.View.draw(View.java:15174)
at android.widget.AbsListView.draw(AbsListView.java:4318)
at android.view.View.updateDisplayListIfDirty(View.java:14096)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.draw(View.java:15174)
at android.view.View.updateDisplayListIfDirty(View.java:14096)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1089)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.draw(View.java:15174)
at android.widget.FrameLayout.draw(FrameLayout.java:592)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2695)
at android.view.View.updateDisplayListIfDirty(View.java:14096)
at android.view.View.getDisplayList(View.java:14119)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:266)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:272)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:311)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2531)
at android.view.
Вот мой код прямо перед, что он заканчивает:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Answer a = null;
if(position -1 >= 0 && myAnswerNotices.size() > position -1){
a = myAnswerNotices.get(position-1);
QuestionFragment.clicked_Question = a.getQuestion();
}
// Go to question view
Intent intent;
if(QuestionFragment.clicked_Question.getType().equals("poll"))
intent = new Intent (getActivity(), PollViewActivity.class);
else
intent = new Intent (getActivity(), QuestionViewActivity.class);
if(a != null) {
if (preferences.contains("notice_" + a.getObjectId())) {
editor.remove("notice_" + a.getObjectId());
editor.commit();
}
if (myAnswerNotices != null && !myAnswerNotices.isEmpty() && myAnswerNotices.contains(a))
myAnswerNotices.remove(a);
}
startActivity(intent);
}
Вот код, который должен начинаться после:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
setContentView(R.layout.activity_question_view);
Toolbar toolbar = (Toolbar) findViewById(R.id.question_view_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
share = (ImageButton) findViewById(R.id.questionView_share_image_button);
emailButton = (Button) findViewById(R.id.questionView_email_button);
title = (TextView) findViewById(R.id.questionView_title_text_view);
username = (TextView) findViewById(R.id.questionView_askedBy_text_view);
createdAt = (TextView) findViewById(R.id.questionView_createdAt_text_view);
followingTextView = (TextView) findViewById(R.id.questionView_follow_textview);
setupQuestion();
setListeners();
setupList();
}
@Colin:
myAnswerNotices инициализируется как переменную:
public class NotificationFragment extends Fragment
implements AdapterView.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener {
private final List<Answer> myAnswerNotices = new ArrayList<>();
и заселен в AsyncTask: общественного класс RefreshTask расширяет AsyncTask> {
@Override
protected void onPreExecute() {
mRefreshWrapper.setRefreshing(true);
// Activity.pinAll();
}
@Override
protected List<Answer> doInBackground(Object... params) {
//myAnswerNotices.clear();
// List<Activity> a_list = new ArrayList<>();
try {
activityNotifications.addAll(Activity.getQuery()
.whereEqualTo(Constants.kQollegeActivityTypeKey, Constants.kQollegeActivityTypeAnswerPosted)
.whereEqualTo(Constants.kQollegeActivityToUserKey, ParseUser.getCurrentUser())
.whereGreaterThan(Constants.kQollegeQuestionCreatedAtKey, checked)
.orderByDescending(Constants.kQollegeQuestionCreatedAtKey)
.include(Constants.kQollegeActivityAnswerKey)
.find());
} catch (ParseException e) {
e.printStackTrace();
}
checked = Calendar.getInstance().getTime();
editor.putLong("notification_checked",checked.getTime());
editor.commit();
for(String s : preferences.getAll().keySet()){
if(s.contains("notice_")){
String a_id = preferences.getString(s, null);
if(a_id != null){
try {
myAnswerNotices.add(Answer.getQuery().get(a_id));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}
for(Activity a : activityNotifications){
myAnswerNotices.add(a.getAnswer());
}
return myAnswerNotices;
}
@Override
protected void onPostExecute(List<Answer> list) {
if(!myAnswerNotices.isEmpty())
mHeaderTextView.setVisibility(View.GONE);
else {
mHeaderTextView.setText("No notifications");
mHeaderTextView.setVisibility(View.VISIBLE);
}
mRefreshWrapper.setRefreshing(false);
}
@Varsha: Вот код, относящийся к моей инициализации адаптера :
NotificationListAdapter mListAdapter = new NotificationListAdapter(getActivity(), R.layout.notification_list_item, myAnswerNotices);
mRefreshWrapper.getListView().setAdapter(mListAdapter);
mListAdapter.setNotifyOnChange(true);
@Titus: Вот весь мой класс адаптера:
class NotificationListAdapter extends ArrayAdapter {
private final int mResourceId;
private final LayoutInflater inflater;
private final Context context;
private NotificationListItemHolder notificationView;
private Answer answer;
public NotificationListAdapter(Context ctx, int resourceId, List objects){
super(ctx,resourceId,objects);
mResourceId = resourceId;
inflater = LayoutInflater.from(ctx);
context = ctx;
}
@Override
public View getView (int position, View convertView, ViewGroup parent) {
answer = (Answer) getItem(position);
// Get or create cached eventView
if(convertView == null){
convertView = inflater.inflate(mResourceId, null);
notificationView = new NotificationListItemHolder(convertView);
convertView.setTag(notificationView);
}
else {
notificationView = (NotificationListItemHolder) convertView.getTag();
}
TextView name = notificationView.getPostedByTextView();
name.setTag(answer);
// Fill Data
fillData();
name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ProfileActivity.class);
Answer a = (Answer) v.getTag();
ParseUser u = a.getPostedBy();
intent.putExtra("User", u.getObjectId());
context.startActivity(intent);
}
});
return convertView;
}
private void fillData(){
try {
Question q = answer.getQuestion().fetch();
notificationView.getTitleTextView().setText(q.getTitle());
} catch (ParseException e) {
e.printStackTrace();
}
notificationView.getPostedByTextView().setText(answer.getPostedByText());
notificationView.getCreatedAtTextView().setText(answer.getCreatedAtText());
}
}
напишите свой код, где 'myAnswerNotices' инициализирован/заполнен, и т. Д. – Breavyn
Обычно это означает, что вы пытаетесь получить доступ к элементу из пустого массива или списка. Из вашего лог-кота, похоже, что ошибка в вашем адаптере, которую вы здесь не размещали –
Для удовольствия, бросьте некоторые заявления println вокруг ваших вызовов .get. Должно помочь вам сузить педераста. – ejsd1989