передача всех элементов массива с использованием цикла for

#android

#Android

Вопрос:

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

класс sampleData.java

 public static ArrayList<Data> generateSampleData() {
int sampleData[] = {
       R.drawable.imageone,
       R.drawable.imagetwo,
       R.drawable.imagethree

};
String repeat = " repeat";
final ArrayList<Data> datas = new ArrayList<Data>();
for (int i = 0; i < SAMPLE_DATA_ITEM_COUNT; i  ) {
    Data data = new Data();
    data.image = sampleData[0];
    data.title = "Pinterest Card";
    data.description = "Super awesome description";
    Random ran = new Random();
    int x = ran.nextInt(i   SAMPLE_DATA_ITEM_COUNT);
    for (int j = 0; j < x; j  )
        data.description  = repeat;
    datas.add(data);
}
return datas;
 

класс Data.java

  public class Data {

    public int image;
    public String title;
    public String description;

    public Data() {}

}
 

вот ошибка, которую я получаю, если я меняю data.image = SampleData[0] на
data.image = SampleData[i]

 06-19 11:51:02.814    1626-1626/com.richapps.true_gamer E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
            at com.richapps.true_gamer.grid.SampleData.generateSampleData(SampleData.java:21)
            at com.richapps.true_gamer.FindPeopleFragment.onCreateView(FindPeopleFragment.java:29)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
            at android.app.BackStackRecord.run(BackStackRecord.java:622)
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
            at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
            at android.os.Handler.handleCallback(Handler.java:605)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
 

Комментарии:

1. С какими трудностями вы столкнулись? Ошибка sytax, исключение? Если вы можете сказать, нам будет легче помочь.

2. Что ты пытаешься реализовать, брат? Можете ли вы рассказать нам о своей идее?

3. этот код отображает только одно и то же изображение в виде сетки. я хочу по-разному отображать все изображения в массиве в gridview

Ответ №1:

Изменить

 data.image = sampleData[0];
 

Для

 data.image = sampleData[i];
 

Комментарии:

1. принудительно закрывается при запуске

2. Вероятно, это связано с чем-то другим в вашем коде. Пожалуйста, поделитесь своим отчетом о сбое.

Ответ №2:

у вас в скобках 0. Это означает, что вы печатаете одно и то же изображение в каждой строке. Измените его на букву вашего цикла, которая является «i»

 data.image = sampleData[i];
 

Ответ №3:

получилось.

Изначально я установил SAMPLE_DATA_ITEM_COUNT=10, но когда я установил для него значение 4, оно сработало, потому что оно должно было соответствовать количеству элементов в массиве. Всем спасибо за помощь

Комментарии:

1. SAMPLE_DATA_ITEM_COUNT заменить sampleData.length() на for loop's условие in

Ответ №4:

Поскольку у вас sampleData[] есть 3 элемента, а SAMPLE_DATA_ITEM_COUNT's значение равно 10, когда вы пытаетесь получить доступ data.image = sampleData[i]; к полученному ArrayIndexOutOfBoundsException, i is greater than 2 измените это

 for (int i = 0; i < SAMPLE_DATA_ITEM_COUNT; i  ) {
    Data data = new Data();
    data.image = sampleData[0];
    data.title = "Pinterest Card";
    data.description = "Super awesome description";
    Random ran = new Random();
    int x = ran.nextInt(i   SAMPLE_DATA_ITEM_COUNT);
    for (int j = 0; j < x; j  )
        data.description  = repeat;
    datas.add(data);
}
 

Для

 for (int i = 0; i < sampleData.length(); i  ){
    Data data = new Data();
    data.image = sampleData[i];
    data.title = "Pinterest Card";
    data.description = "Super awesome description";
    Random ran = new Random();
    int x = ran.nextInt(i   SAMPLE_DATA_ITEM_COUNT);
    for (int j = 0; j < x; j  )
        data.description  = repeat;
    datas.add(data);
}