bakusek
bakusek

Reputation: 135

Android String array length and loop

I've got little problem with String array. In one class I've got simple listview with multiple choice. At the end each choice is put to String array and share to next class.

SparseBooleanArray checked = listView.getCheckedItemPositions();
        ArrayList<String> selectedItems = new ArrayList<String>();
    for (int i = 0; i < checked.size(); i++) {
        // Item position in adapter
        int position = checked.keyAt(i);
        // Add sport if it is checked i.e.) == TRUE!
        if (checked.valueAt(i))
            selectedItems.add(adapter.getItem(position));
    }

    String[] outputStrArr = new String[selectedItems.size()];

    for (int i = 0; i < selectedItems.size(); i++) {
        outputStrArr[i] = selectedItems.get(i);
    }

   Intent intent = new Intent(getApplicationContext(),
            ReadComments.class);

    // Create a bundle object
    Bundle b = new Bundle();
    b.putStringArray("selectedItems", outputStrArr);

    // Add the bundle to the intent.
    intent.putExtras(b);

    // start the ResultActivity
    startActivity(intent);

In ReadComments class i've made simple method:

public String[] tablica(){
        Bundle b = getIntent().getExtras();
        String[] resultArr = b.getStringArray("selectedItems");
        return resultArr;

    }

which bring back my data. When I put it to another method in the same class:

        for(x=0;x<=resultArr.length;x++){
            if(resultArr[x] == nazwa){
                lat = mListaMar.get(TAG_SZER);
                longi = mListaMar.get(TAG_DLUG);
                // String laty = Float.toString(lat);
                name = mListaMar.get(TAG_MARKET);
                ustawMape();

            }
        }}

I've got ArrayIndexOutOfBoundsException. Pleasy help me it's a simple problem but very annoying

12-22 13:23:50.055: E/AndroidRuntime(8735): FATAL EXCEPTION: main
12-22 13:23:50.055: E/AndroidRuntime(8735): java.lang.ArrayIndexOutOfBoundsException
12-22 13:23:50.055: E/AndroidRuntime(8735):     at com.flex.sklepik.ReadComments.updateList(ReadComments.java:235)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at com.flex.sklepik.ReadComments$LoadComments.onPostExecute(ReadComments.java:318)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at com.flex.sklepik.ReadComments$LoadComments.onPostExecute(ReadComments.java:1)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at android.os.AsyncTask.finish(AsyncTask.java:417)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at android.os.Looper.loop(Looper.java:130)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at android.app.ActivityThread.main(ActivityThread.java:3701)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at java.lang.reflect.Method.invokeNative(Native Method)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at java.lang.reflect.Method.invoke(Method.java:507)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
12-22 13:23:50.055: E/AndroidRuntime(8735):     at dalvik.system.NativeStart.main(Native Method)

P.S. 235 line show:

if(resultArr[x] == nazwa){

Upvotes: 0

Views: 8838

Answers (1)

MalaKa
MalaKa

Reputation: 3794

Replace

 for(x=0;x<=resultArr.length;x++)

With

 for(x=0;x<resultArr.length;x++)

Why? An array with the length of 3 has indices 0,1,2. In your case, the problem occurs, because you are trying to call resultArr[3] if the length is 3.

Upvotes: 6

Related Questions