Как сделать все arraylists одинакового размера в Android - PullRequest
1 голос
/ 27 января 2012

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

arraylist 1 = 25 пунктов атталист 2 = 35 предметов arraylits 3 = 5 пунктов ArrayList 4 = 13 пунктов arraylist 5 = 40 пунктов.

когда я отображаю все элементы в одном представлении (например, веб-представление), я могу прокрутить до 5 элементов, когда при переходе к 6-му элементу я получаю исключение. как это побороть. пожалуйста помогите

вот мой код, который я анализирую и добавляю в списки.

Ответы [ 6 ]

3 голосов
/ 27 января 2012

Не знаю, но посмотрим, поможет ли это:

package your.package
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class TestProjectActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TextView tv = new TextView(this);

    setContentView(tv);

    ArrayList<Integer> a = new ArrayList<Integer>();

    a.add(1);
    a.add(2);
    a.add(3);
    a.add(4);

    ArrayList<Integer> b = new ArrayList<Integer>();

    b.add(5);
    b.add(6);
    b.add(7);        

    a.addAll(b);


    String p = "";
    for (int i = 0; i < a.size(); i++)
    {
        p = String.format("%s, %d", p, a.get(i));
    }

    tv.setText(p);
}

}

2 голосов
/ 27 января 2012

Я бы порекомендовал иметь другую структуру данных и добавить список этого элемента в основную структуру книги, новый Datastructre может быть:

case XmlPullParser.END_TAG:
        if (xmlpullparser.getName().toString().equals("BOOK")) {
            book.setInsightList(insightList);
            book.setcasestudyList(casestudyList);
            book.setquotesList(quoteList);
            book.setoneminwonderList(oneminwonderList);
            book.setsecretList(secretList);
            bookList.add(book);
            Intro.book = book;
        } else if (xmlpullparser.getName().toString().equals("chapter")) {
                            if(objInsight==null)
                                objInsight=new INSIGHT();
                            listInsights.add(objInsight);
                            objInsight=null;
        } else if (xmlpullparser.getName().toString().equals("secret")) {
            secretList.add(secret);
        } else if (xmlpullparser.getName().toString().equals("prelim")) {
            secretList.add(secret);
            this.prelim = false;
        } else if (xmlpullparser.getName().toString().equals("prelimTitle")) {
            this.prelimTitle = false;
        } else if (xmlpullparser.getName().toString().equals("prelimIntro")) {
            this.prelimIntro = false;
        } else if (xmlpullparser.getName().toString()
                .equals("prelimInsight")) {
            this.prelimInsight = false;
        } else if (xmlpullparser.getName().toString()
                .equals("prelimContent")) {
            this.prelimContent = false;
        } else if (xmlpullparser.getName().toString()
                .equals("chapterIntro")) {
            secretList.add(secret);
            this.chapterIntro = false;
        } else if (xmlpullparser.getName().toString().equals("bold")) {
            this.chapterIntrobold = false;
        } else if (xmlpullparser.getName().toString().equals("secretIntro")) {
            this.secretIntro = false;
        } else if (xmlpullparser.getName().toString().equals("insight")) {

        } else if (xmlpullparser.getName().toString().equals("caseStudy")) {
            this.caseStudy = false;
            casestudyList.add(casestudy);
        } else if (xmlpullparser.getName().toString().equals("oneMinute")) {
            this.oneMinute = false;
            oneminwonderList.add(oneminwonder);
        } else if (xmlpullparser.getName().toString().equals("quote")) {
            quoteList.add(quotes);
        } else if (xmlpullparser.getName().toString()
                .equals("quoteContent")) {
            this.quoteContent = false;
        } else if (xmlpullparser.getName().toString()
                .equals("quoteCitation")) {
            this.quoteCitation = false;
        } else if (xmlpullparser.getName().toString()
                .equals("secretContent")) {
            this.secretContent = false;
        }

        break;
2 голосов
/ 27 января 2012

Сделайте некоторые значения по умолчанию в вашем классе как

public class BOOK {
String BId="";
String BTitle="";
String prelimTitle="";
String prelimIntro="";
String prelimInsight="";
}
2 голосов
/ 27 января 2012

это не android ... технически проблема с java, arraylist - это вид изменяемого массива ... просто проверьте, где индекс, который вы вызываете, меньше размера arrayList, если да, то объедините, если не так, то еговы вышли за пределы исключения .. или вы можете попытаться преобразовать свой массив списков в массив следующим образом (предположим, тип данных - String):

String mArray[]=mArrayList.toArray(new String[SIZE]);

это присвоит пустым элементам ноль в случае, если размер mArrayList

удачи

2 голосов
/ 27 января 2012

Легче увидеть, в чем проблема, если ваш код опубликован.Если вы хотите вернуть значение null, когда вы получаете исключение вне пределов, однако, что-то вроде этого должно сделать это:

try {
  //your code that's throwing index out of bounds

  //this block should include as little of your code as possible
  //for example, don't put a for loop in here --
  //  put this inside the for loop if you can.
} catch (IndexOutOfBoundsException e) {
  return null;
  // or do what you need to do with the null
}

Здесь некоторый вводный материал по обработке исключений в случаеВы хотели бы проверить это.

1 голос
/ 27 января 2012

Вы получили это исключение, возможно, недостаточно места для этого архива. Предположим, что есть три архива, такие как a с размером 10, b с размером 10 и c с размером 10.

Теперь вы добавляете массив ArrayList z в ArrayList z размером 10, тогда есть всего 30 данных, но индекс только 10. Таким образом, это вызывает исключение IndexOutofBount.

Решение

Итак, чтобы решить, что вам нужно взять новый ArrayList z с размером, равным сумме всех трех размеров массива. и затем добавьте три данных arrayList в этот arrayList.

Вы можете присвоить размер ArrayList с помощью кода ниже.

ArrayList<Integer>[size] arrayOfLists = new ArrayList<Integer>[size]();

Надеюсь, это поможет вам.

Если нет, то дайте мне знать.

Наслаждайтесь. :))

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