La recursión no funciona como se esperaba

Tengo un código que debería obtener un LinearLayout (con más LinearLayout dentro) y obtener todas las vistas dentro de ellos. Hay algunas vistas de texto que tienen etiquetas, y de acuerdo con esto, debería construir 3 cadenas. El problema es que arroja una excepción en la primera línea después del ciclo. Aquí hay un ejemplo de código para explicar:

private void insertToDB(final DataBaseHelper db, LinearLayout layout, 
                              String subject, String term, String meaning) 
{
    View v1 = null;
    for(int i=0; i < layout.getChildCount(); i++) {
        try {
            v1 = layout.getChildAt(i);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        if(v1 instanceof LinearLayout)
        {
            insertToDB(db, ((LinearLayout)v1), subject, term, meaning);
        }
        if (v1.getTag() != null) {
            String val = v1.getTag().toString();
            if (val.equals("subject")) {
                subject = ((TextView)v1).getText().toString();
            }
            else if (val.equals("term")) {
                term+=((TextView)v1).getText().toString()+"$";
            }
            else if (val.equals("meaning")) {
                meaning+=((TextView)v1).getText().toString()+"$";
            }

        }
    }
    term = term.substring(0, term.length()-1);
    meaning = meaning.substring(0, meaning.length()-1);
    Card c = new Card(subject, term, meaning);
    db.Insert(c);
} 

Stacktrace:

06-25 20:27:59.332: D/AndroidRuntime(269): Shutting down VM
06-25 20:27:59.332: W/dalvikvm(269): threadid=1: thread exiting with uncaught exception (group=0x4001d800)

06-25 20:28:01.551: E/AndroidRuntime(269): FATAL EXCEPTION: main
06-25 20:28:01.551: E/AndroidRuntime(269): java.lang.StringIndexOutOfBoundsException
06-25 20:28:01.551: E/AndroidRuntime(269):  at java.lang.String.substring(String.java:1579)
06-25 20:28:01.551: E/AndroidRuntime(269):  at com.ronEven.iCards.AddRemove$1.insertToDB(AddRemove.java:78)
06-25 20:28:01.551: E/AndroidRuntime(269):  at com.ronEven.iCards.AddRemove$1.insertToDB(AddRemove.java:62)
06-25 20:28:01.551: E/AndroidRuntime(269):  at com.ronEven.iCards.AddRemove$1.onClick(AddRemove.java:46)
06-25 20:28:01.551: E/AndroidRuntime(269):  at android.view.View.performClick(View.java:2408)
06-25 20:28:01.551: E/AndroidRuntime(269):  at android.view.View$PerformClick.run(View.java:8816)
06-25 20:28:01.551: E/AndroidRuntime(269):  at android.os.Handler.handleCallback(Handler.java:587)
06-25 20:28:01.551: E/AndroidRuntime(269):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-25 20:28:01.551: E/AndroidRuntime(269):  at android.os.Looper.loop(Looper.java:123)
06-25 20:28:01.551: E/AndroidRuntime(269):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-25 20:28:01.551: E/AndroidRuntime(269):  at java.lang.reflect.Method.invokeNative(Native Method)
06-25 20:28:01.551: E/AndroidRuntime(269):  at java.lang.reflect.Method.invoke(Method.java:521)
06-25 20:28:01.551: E/AndroidRuntime(269):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-25 20:28:01.551: E/AndroidRuntime(269):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-25 20:28:01.551: E/AndroidRuntime(269):  at dalvik.system.NativeStart.main(Native Method)
Respuesta 1

Una de sus llamadas de String.substring después del ciclo aparentemente causa ese problema porque están tratando de extraer una porción de String de una cadena vacía.

Por lo tanto:

emptyString.length () - 1 = -1

Que es un índice ilegal dentro de una cadena.

Respuesta: 2

Necesito pasar un valor de cadena de un escenario a otro. ¿Es eso posible en Gauge? Escenario 1: Inicie sesión con nombre de usuario y contraseña Escenario 2: El nombre de usuario debe estar visible en la esquina superior derecha ...

Aquí está mi código para intercambiar dos números usando la clase wrapper, soy consciente del hecho de que Java solo tiene pasar por valor, por lo que no podemos usar algo como un puntero para pasar la dirección de las variables.

Quiero tener una clase principal en la que los usuarios definan cuántos procesos de clase de Cliente desean iniciar. ¿Cómo resuelvo esto en mi main? A continuación se muestra el código que uso para ejecutar la clase Cliente una vez. tratar { ...

Digamos que hay un proyecto padre A que tiene módulos B y C en su pom.xml. Proyecto A | -pom.xml | -----------> Módulo B | | -> pom.xml | -----------> Módulo C | ...