java.lang.IndexOutOfBoundsException:索引18无效,大小为18
这是个例外 java.lang.IndexOutOfBoundsException:索引18无效,大小为18 位于java.util.ArrayList.ThrowindexOutfBoundsException(ArrayList.java:255) 获取(ArrayList.java:308) TestActivity$5.onClick(TestActivity.java:280)位于 android.view.view.performClick(view.java:4780)位于 查看$PerformClick.run(view.java:19866) handleCallback(Handler.java:739)位于 dispatchMessage(Handler.java:95)位于 Looper.loop(Looper.java:135)位于 main(ActivityThread.java:5254)位于 java.lang.reflect.Method.invoke(本机方法)位于 java.lang.reflect.Method.invoke(Method.java:372)位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 自定义对象类java.lang.IndexOutOfBoundsException:索引18无效,大小为18,java,android,exception,arraylist,Java,Android,Exception,Arraylist,这是个例外 java.lang.IndexOutOfBoundsException:索引18无效,大小为18 位于java.util.ArrayList.ThrowindexOutfBoundsException(ArrayList.java:255) 获取(ArrayList.java:308) TestActivity$5.onClick(TestActivity.java:280)位于 android.view.view.performClick(view.java:4780)位于 查看$
//method just notifies the RecyclerView that an item was removed.
public void removeFromItemsData(int position){
notifyItemRemoved(position);
}
如何添加数据
在onCreate活动中,我实例化了Recyclerview。RecyclerView接受一个arraylist,所以我传递一个空的
public class CustomObject{
private String name;
private int distance;
private String category;
private String id;
private double rating;
private String ratingColor;
private String prefix;
private String suffix;
private int priceTier;
private String currency;
private String phone;
private String twitter;
private String url;
private String menu;
String address;
String city;
String state;
String postalCode;
double lat;
double lng;
String review;
int reviewCount;
String firstName;
String lastName;
String userIconPrefix;
String userIconSuffix;
String secondsReview;
public CustomObject() {
this.name = "";
this.distance = 0;
this.setCategory("");
this.id = "";
this.rating = 0;
this.ratingColor = "";
this.prefix = "";
this.suffix = "";
this.priceTier = 0;
this.currency = "";
this.phone = "";
this.twitter = "";
this.url = "";
this.menu = "";
this.address = "";
this.city = "";
this.state = "";
this.postalCode = "";
this.lat = 0;
this.lng = 0;
this.review = "";
this.reviewCount = 0;
this.firstName = "";
this.lastName = "";
this.userIconPrefix = "";
this.userIconSuffix = "";
this.secondsReview = "";
}
public void setSecondsReview(String secondsReview){
this.secondsReview = secondsReview;
}
public String getSecondsReview(){
return secondsReview;
}
public void setUserIconSuffix(String userIconSuffix){
this.userIconSuffix = userIconSuffix;
}
public String getUserIconSuffix(){
return userIconSuffix;
}
public void setUserIconPrefix(String userIconPrefix){
this.userIconPrefix = userIconPrefix;
}
public String getUserIconPrefix(){
return userIconPrefix;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getFirstName(){
return firstName;
//todo if String firstNAme == null, then return "a foursquare user"
}
public void setLastName(String lastName){
this.lastName = lastName;
}
public String getLastName(){
return lastName;
}
public void setReviewCount(int reviewCount){
this.reviewCount = reviewCount;
}
public int getReviewCount(){
return reviewCount;
}
public void setReview(String review){
this.review = review;
}
public String getReview(){
return review;
}
public void setLng(double lng){
this.lng = lng;
}
public double getLng(){
return lng;
}
public void setLat(double lat){
this.lat = lat;
}
public double getLat(){
return lat;
}
public void setPostalCode(String postalCode){
this.postalCode = postalCode;
}
public String getPostalCode(){
return postalCode;
}
public void setState(String state){
this.state = state;
}
public String getState(){
return state;
}
public void setCity(String city){
this.city = city;
}
public String getCity(){
return city;
}
public void setAddress(String address){
this.address = address;
}
public String getAddress(){
return address;
}
public void setMenuUrl(String menu){
this.menu = menu;
}
public String getMenuUrl(){
return menu;
}
public void setUrl(String url){
this.url = url;
}
public String getUrl(){
return url;
}
public void setTwitter(String twitter){
this.twitter = twitter;
}
public String getTwitter(){
return twitter;
}
public void setPhone(String phone){
this.phone = phone;
}
public String getPhone(){
return phone;
}
public String getCurrency(){
return currency;
}
public void setCurrency(String currency){
this.currency = currency;
}
public int getPriceTier(){
return priceTier;
}
public void setPriceTier(int priceTier){
this.priceTier = priceTier;
}
public String getSuffix(){
return suffix;
}
public void setSuffix(String suffix){
this.suffix = suffix;
}
public String getPrefix(){
return prefix;
}
public void setPrefix(String prefix){
this.prefix = prefix;
}
public double getRating(){
if(rating > 0){
return rating;
}
return 0; //TODO display symbol if rating not found
}
public void setRating(double rating){
this.rating = rating;
}
public Integer getDistance() {
if (distance >= 0) {
return distance;
}
return 0; //TODO display symbol if distance not found, like N/A
}
public void setDistance(int distance) {
this.distance = distance;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
稍后在AsyncTask中,我将这些项添加到适配器中
List listTitle = new ArrayList(); //empty arraylist
mAdapter = new Fragment1Adapter(listTitle);
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter);
编辑
由于您已经完成了我们的聊天和编辑:
您需要在ArrayList中添加和删除这些项,并通知适配器更改
public void addItem(FoursquareVenue data) {
itemsData.add(data);
notifyItemInserted(itemsData.size() - 1);
}
然后在ArrayList中循环以删除项
您只是在试图访问数据的方式上有点混乱 有一个问题是,您正在创建CustomObjects的迭代器,并将其解析为数据类型
mAdapter.getItemsData()
从迭代器中删除元素应将其从列表中删除
CustomObject poi = new CustomObject ();
if (jsonArray.getJSONObject(i).has("venue")) {
poi.setName(jsonArray.getJSONObject(i).getJSONObject("venue").getString("name"));
poi.setId(jsonArray.getJSONObject(i).getJSONObject("venue").getString("id"));
}
listTitle.addItem(poi);// Add to ListArray
for(Iterator Iterator=mAdapter.Iterator();Iterator.hasNext();){
CustomObject itemsData=iterator.next();
if(itemsData.getItemsData().get(i).getPriceTier()!=1){//if语句引发错误
//从迭代器和列表中删除当前元素。
iterator.remove();
}
i++;
}
CustomObject itemsData=iterator.next();
让我知道这是否有帮助。异常的第一行清楚地说明了问题所在。索引从0开始,大小为-1,带有“CustomObject itemsData=iterator.next();”我只能访问setter和getter。我需要访问arraylist,它位于适配器类中。感谢您尝试ti帮助:)我正在尝试循环一个arraylist,并删除所选位置的所有数据,这不符合某些条件。所有数据都显示在RecyclerView中,这就是我调用notifyItemRemoved(position);:)的原因@大家好,因为我有一个RecyclerView,它需要一个适配器,它需要一个arraylist,所以我创建了一个空的arraylist并将其传递给我的adapter类。稍后,我通过在适配器类中添加数据的方法来添加数据。方法:“public void addItem(FoursquareVenue数据){itemsData.add(数据);notifyItemInserted(itemsData.size()-1);}”。@您添加了CustomObjects类
public void addItem(FoursquareVenue data) {
itemsData.add(data);
notifyItemInserted(itemsData.size() - 1);
}
CustomObject poi = new CustomObject ();
if (jsonArray.getJSONObject(i).has("venue")) {
poi.setName(jsonArray.getJSONObject(i).getJSONObject("venue").getString("name"));
poi.setId(jsonArray.getJSONObject(i).getJSONObject("venue").getString("id"));
}
listTitle.addItem(poi);// Add to ListArray
for (Iterator<CustomObject> iterator = mAdapter.iterator(); iterator.hasNext();) {
CustomObject itemsData = iterator.next();
if (itemsData.getItemsData().get(i).getPriceTier() != 1) { //if statement throws error
// Remove the current element from the iterator and the list.
iterator.remove();
}
i++;
}
CustomObject itemsData = iterator.next();