Problemas para colocar las condiciones adecuadas en las declaraciones 'else if' para realizar consultas en Android

Estoy tratando de cambiar los valores en el mismo atributo String en mi aplicación usando la instrucción else if pero hasta ahora he tenido algunos problemas. Hasta ahora no he podido cambiar los valores. Aquí está la parte significativa de mi código. ¿Alguna sugerencia?

protected void ScheduleOp1() {
   // TODO Auto-generated method stub
   String VarMin = "-140 minute";

   db.execSQL("DROP VIEW IF EXISTS " + view_Schedule1);
   db.execSQL("CREATE VIEW " + view_Schedule1 + " " + " AS SELECT "
         + sBusDepart + "," + sBusArrival + "," + sBusDepartT + ","
         + sBusArrivalT + " FROM" + " " + fDepart + " " + "INNER JOIN" + " "
         + sBusSchedule + " " + "ON " + sBusSchedule + "." + sBusDate + "="
         + fDepart + "." + fDate + " " + "WHERE " + fDate + "= '" + fDate1
         + "'" + " " + "AND" + " " + sBusDepartT + " "
         + "= strftime('%H:%M', '" + fTime + "', '" + VarMin + "');");

   Cursor cur = fetchAllTodos();
   startManagingCursor(cur);

   if (cur.moveToFirst()) {
      Toast.makeText(
            getBaseContext(),
            cur.getString(0) + "  " + cur.getString(1) + "  "
                  + cur.getString(2) + "  " + cur.getString(3) + "\n",
            Toast.LENGTH_LONG).show();
   } else if (cur.moveToFirst() == false) {
      VarMin = "-150 minute";
   } else {
      Toast.makeText(this, "Not found", Toast.LENGTH_LONG).show();
   }
}

Espero que me puedan ayudar.

--Actualizado--

Aquí hay una actualización del código. Lo que estoy tratando de hacer es cambiar constantemente el valor de 'VarMin' para realizar una búsqueda a través de la vista que he creado. la declaración 'else' es para cuando no se encuentran absolutamente ningún resultado.

protected void ScheduleOp1() {
        // TODO Auto-generated method stub


        db.execSQL("DROP VIEW IF EXISTS " +view_Schedule1);
        db.execSQL("CREATE VIEW " +view_Schedule1+ " " +
                " AS SELECT " +sBusDepart+ "," +sBusArrival+ "," 
                +sBusDepartT+ "," +sBusArrivalT+ " FROM" + " "
                +fDepart+ " " + "INNER JOIN" + " " +sBusSchedule+ " " +
                "ON " +sBusSchedule+ "." +sBusDate+ "=" +fDepart+ "." 
                +fDate+ " " + "WHERE " +fDate+ "= '" +fDate1+"'"+" "+
                "AND" + " " +sBusDepartT+ " " + "= strftime('%H:%M', '" +fTime+ "', '" +VarMin+"');");





          Cursor cur = fetchAllTodos();
            startManagingCursor (cur);

            if (cur.moveToFirst()) {




                Toast.makeText(getBaseContext(), cur.getString(0)+ "  " +cur.getString(1)+ "  "
                 +cur.getString(2)+ "  " +cur.getString(3)+ "\n",
                    Toast.LENGTH_LONG).show();
            }else if (cur.moveToFirst() == false){
                VarMin = "-145 minute"; 
            }
            else if (cur.moveToFirst() == false){
                VarMin = "-150 minute";
            }
            else{
                Toast.makeText(this, "Not found", Toast.LENGTH_LONG).show();
            }


    }




           //fetching records from database
         public  Cursor fetchAllTodos() {   
         return db.query(view_Schedule1, new String [] {sBusDepart, 
                 sBusArrival, sBusDepartT, sBusArrivalT }, null, null, null, null, null);
           }

    }

Espero que me puedan ayudar.

--ACTUALIZAR --

Aquí hay una actualización del código completo.

package sirtat.individualProject.PublicTransportationTimeScheduler;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

import android.view.View;
import android.widget.Button;

import android.widget.Toast;

import android.widget.TimePicker;
import android.widget.DatePicker;

import java.util.Calendar;
import java.util.Locale;
import android.database.Cursor;

public class ScheduleActivity extends Activity {
    SQLiteDatabase db;

    TimePicker timePicker;
    DatePicker datePicker;


    int hour, minute;
    int yr, month, day;


    static String fDate1="DepartureDate";
    static String fDate2="DepartureDate";
    static String fTime="DEPART_TIME";
    static String fTime2="DEPART_TIME";

    public static final String view_Schedule1 = "ViewSchedule1";
    public static final String sBusArrival = "SBusArrivalLocation";
    public static final String sBusDepart = "SBusDepartLocation";
    public static final String sBusArrivalT = "SBusArrivalTime";
    public static final String sBusDepartT = "SBusDepartTime";
    public static final String fDepart = "FlightDeparture";
    public static final String sBusSchedule = "SkyBusSchedule";
    public static final String sBusDate = "SkyBusDate";
    public static final String fDate = "FlightDate";

    private int Min=140;
    private String getVarMin(){
        return "-"+Min+" " + "minute";
    }


    //private String VarMin = "";

    /** Called when the activity is first created */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.schedule_layout);

        db = openOrCreateDatabase("PublicTransport2" , SQLiteDatabase.CREATE_IF_NECESSARY, null);

        db.setVersion(1);
        db.setLocale(Locale.getDefault());
        db.setLockingEnabled(true); 



        Calendar today = Calendar.getInstance();

        //--GET THE CURRENT DATE--
        yr= today.get(Calendar.YEAR);
        month = today.get(Calendar.MONTH);
        day = today.get(Calendar.DAY_OF_MONTH);

        //--GET THE CURRENT TIME--
        hour = today.get(Calendar.HOUR);
        minute = today.get(Calendar.MINUTE);

        timePicker = (TimePicker) findViewById(R.id.timePicker);

        datePicker = (DatePicker) findViewById(R.id.datePicker);





        //--Button view--
                Button btnOp1 = (Button) findViewById(R.id.btnOption1);
                btnOp1.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {

                        int year1 = datePicker.getYear();
                        int mnth1 = datePicker.getMonth() + 1;
                        int dy1 = datePicker.getDayOfMonth();
                        int hr1 = timePicker.getCurrentHour();
                        int min1 = timePicker.getCurrentMinute();

                        fDate1 = (pad(year1)) + ("-") + (pad(mnth1))
                             + ("-") + (pad(dy1));
                        fTime = (pad(hr1)) + (":") + (pad(min1));

                        ScheduleOp1();  
                            }
                    private Object pad(int b) {
                        // TODO Auto-generated method stub
                        if (b >= 10){
                            return String.valueOf(b);
                        }else{
                           return "0" + String.valueOf(b);
                        }


                    }
                   });  

                Button btnOp2 = (Button) findViewById(R.id.btnScheduleOption2);
                btnOp2.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {

                        int year2 = datePicker.getYear();
                        int mnth2 = datePicker.getMonth() + 1;
                        int dy2 = datePicker.getDayOfMonth();
                        int hr2 = timePicker.getCurrentHour();
                        int min2 = timePicker.getCurrentMinute();

                        fDate2 = (pad2(year2)) + ("-") + (pad2(mnth2))
                             + ("-") + (pad2(dy2));
                            fTime2 = (pad2(hr2)) + (":") + (pad2(min2));

                            ScheduleOp2();



                    }


                    private Object pad2(int c) {
                        // TODO Auto-generated method stub
                        if (c >= 10){
                            return String.valueOf(c);
                        }else{
                           return "0" + String.valueOf(c);
                        }
                    }

                });

            }

    protected void ScheduleOp1() {
        // TODO Auto-generated method stub


            Cursor cur = null;
            boolean mustCont = true;
            while (mustCont){
                db.execSQL("DROP VIEW IF EXISTS " +view_Schedule1);
                db.execSQL("CREATE VIEW " +view_Schedule1+ " " +
                        " AS SELECT " +sBusDepart+ "," +sBusArrival+ "," 
                        +sBusDepartT+ "," +sBusArrivalT+ " FROM" + " "
                        +fDepart+ " " + "INNER JOIN" + " " +sBusSchedule+ " " +
                        "ON " +sBusSchedule+ "." +sBusDate+ "=" +fDepart+ "." 
                        +fDate+ " " + "WHERE " +fDate+ "= '" +fDate1+"'"+" "+
                        "AND" + " " +sBusDepartT+ " " + "= strftime('%H:%M', '" +fTime+ "', '" +getVarMin()+"');");
                cur = fetchAllTodos();

                if (cur.getCount() == 0){
                    switch (Min){
                    case 140 :
                        Min = 145;
                        break;
                    case 145 :
                        Min = 150;
                        break;
                    case 150 :
                        Min = 155;
                        break;
                    case 155 :
                        Min = 180;
                        break;
                    case 200 :
                        mustCont = false;
                        break;
                    }

                }else{
                    mustCont = false;
                }
            }
            if(cur != null && cur.getCount()>0){
                cur.moveToFirst();
                Toast.makeText(getBaseContext(), cur.getString(0)+ "  " +cur.getString(1)+ "  "
                             +cur.getString(2)+ "  " +cur.getString(3)+ "\n",
                                Toast.LENGTH_LONG).show();
            }else {
                Toast.makeText(this, "Not found", Toast.LENGTH_LONG).show();
                }
    }
protected void ScheduleOp2(){

        Toast.makeText(getBaseContext(), "Date selected:"
                 + fDate2 + "\n" +
                "Time Selected:" + fTime2,
                Toast.LENGTH_LONG).show();
    }


           //fetching records from database
         public  Cursor fetchAllTodos() {   
         return db.query(view_Schedule1, new String [] {sBusDepart, 
                 sBusArrival, sBusDepartT, sBusArrivalT }, null, null, null, null, null);
           }



    }

Y aquí está la actualización de la parte significativa del código.

protected void ScheduleOp1() {
        // TODO Auto-generated method stub


            Cursor cur = null;
            boolean mustCont = true;
            while (mustCont){
                db.execSQL("DROP VIEW IF EXISTS " +view_Schedule1);
                db.execSQL("CREATE VIEW " +view_Schedule1+ " " +
                        " AS SELECT " +sBusDepart+ "," +sBusArrival+ "," 
                        +sBusDepartT+ "," +sBusArrivalT+ " FROM" + " "
                        +fDepart+ " " + "INNER JOIN" + " " +sBusSchedule+ " " +
                        "ON " +sBusSchedule+ "." +sBusDate+ "=" +fDepart+ "." 
                        +fDate+ " " + "WHERE " +fDate+ "= '" +fDate1+"'"+" "+
                        "AND" + " " +sBusDepartT+ " " + "= strftime('%H:%M', '" +fTime+ "', '" +getVarMin()+"');");
                cur = fetchAllTodos();

                if (cur.getCount() == 0){
                    switch (Min){
                    case 140 :
                        Min = 145;
                        break;
                    case 145 :
                        Min = 150;
                        break;
                    case 150 :
                        Min = 155;
                        break;
                    case 155 :
                        Min = 180;
                        break;
                    case 200 :
                        mustCont = false;
                        break;
                    }

                }else{
                    mustCont = false;
                }
            }
            if(cur != null && cur.getCount()>0){
                cur.moveToFirst();
                Toast.makeText(getBaseContext(), cur.getString(0)+ "  " +cur.getString(1)+ "  "
                             +cur.getString(2)+ "  " +cur.getString(3)+ "\n",
                                Toast.LENGTH_LONG).show();
            }else {
                Toast.makeText(this, "Not found", Toast.LENGTH_LONG).show();
                }
    }

Espero que me puedan ayudar. Gracias

preguntado el 03 de mayo de 12 a las 12:05

En primer lugar, en lugar de 'else if(cur.moveToFirst()==false)', simplemente puede usar 'else' porque si no es cierto, entonces tiene que ser falso. De todos modos, ¿cuál es el problema al que te enfrentas? ¿Su variable 'VarMin' no cambia? Verifique el valor de 'cur.moveToFirst()' imprimiendo en la consola. -

Hola, no puedo cambiarlo a 'otro' porque lo estoy usando en caso de que no se recupere ninguna información. ¿Hay una mejor manera de citar una condición para una declaración múltiple else if para seguir cambiando los valores en el atributo 'VarMin' si no se encuentra información de la recuperación anterior? e intenté copiar y pegar el brindis de la declaración 'if' pero recibí un error de excepción... ¿alguna sugerencia? -

Bien, volvamos a lo básico. Dices que estás buscando, pero no veo comparaciones. ¿Con qué está buscando/comparando para definir cuándo su búsqueda es exitosa? -

3 Respuestas

Editar: agregué el código para administrar su consulta

Algo que podrías hacer:

private int mMinutes = 145;
protected void ScheduleOp1() {
    Cursor cur = null;
    boolean mustContinue = true  ;
    while(mustContinue){
         db.execSQL("DROP VIEW IF EXISTS " +view_Schedule1);
    db.execSQL("CREATE VIEW " +view_Schedule1+ " " +
            " AS SELECT " +sBusDepart+ "," +sBusArrival+ "," 
            +sBusDepartT+ "," +sBusArrivalT+ " FROM" + " "
            +fDepart+ " " + "INNER JOIN" + " " +sBusSchedule+ " " +
            "ON " +sBusSchedule+ "." +sBusDate+ "=" +fDepart+ "." 
            +fDate+ " " + "WHERE " +fDate+ "= '" +fDate1+"'"+" "+
            "AND" + " " +sBusDepartT+ " " + "= strftime('%H:%M', '" +fTime+ "', '-" +mMinutes+" minute');");
      cur = fetchAllTodos()
        if(cur.getCount()==0){
            mustContinue = true ;
            switch(mMinutes){
            case 145 :
                mMinutes = 150 ;
                break;
            case 150 :
                mMinutes = 155 ;
                break;
            case 200 : //for max value for example
                mustContinue = false ;
                break;
                //etc ....
            }

        }else{
            mustContinue = false ;
        }
    }
    if(cur != null && cur.getCount()>0){
        cur.moveToFirst();
        Toast.makeText(getBaseContext(), cur.getString(0)+ "  " +cur.getString(1)+ "  "
                 +cur.getString(2)+ "  " +cur.getString(3)+ "\n",
                    Toast.LENGTH_LONG).show();
    }else{
        mMinutes = 145;
        Toast.makeText(this, "Not found", Toast.LENGTH_LONG).show();
    }
}

contestado el 04 de mayo de 12 a las 16:05

hola, intenté usar esto pero la aplicación simplemente se bloqueó. para Cursor cur= null; , ¿se supone que es el mismo 'cur' que el utilizado para cur.moveToFirst();? estoy un poco confundido - hombre galleta

hola, probé el código nuevamente y logré cambiar el valor int. pero ahora, cuando selecciono una hora que no arroja ningún resultado, la aplicación se bloquea y falla. parece que la sentencia else contiene errores. ¿Hay alguna forma de arreglar esto? - hombre galleta

¿Puede actualizar su publicación con su código actual que no funciona? El código de arriba no es la respuesta absoluta, debes adaptarlo a lo que buscas... - Alexandre B.

Hola, actualicé la publicación con una actualización del código completo, así como la parte importante del código. En este momento, solo la declaración else está teniendo problemas, ya que no puede detectar la excepción y hace que la aplicación se cuelgue y luego se bloquee. ¿Alguna sugerencia? - hombre galleta

Algo anda mal, quizás porque no me quedó nada claro. El método de cambio le permite ajustar el tiempo si no hay ningún resultado. Entonces, si actualmente el valor es 145 y no hay resultados, entonces continuamos con 150 ect ... El último paso es 200 pero nunca afecta 200 a la variable. entonces agrega case 180 : mMinutes=200; break y funcionará - Alexandre B.

¿Has intentado usar una variable global como private String VarMin = "-140 minute"; ?

contestado el 03 de mayo de 12 a las 13:05

hola, gracias! Logré que los valores cambiaran, pero ¿hay una mejor manera de cambiar la condición de la declaración 'else if'? porque ahora mi declaración 'else' no funciona en absoluto ... - hombre galleta

Si esto no resolvió sus problemas, no debería ser la respuesta aceptada. - Barak

Tus if no tiene sentido... MoveToFirst es verdadero o falso (lo que significa que no se devolvieron registros). Básicamente, lo que tienes ahora NUNCA mostrar el brindis "No encontrado".

Debido a esto, no está claro si desea mostrar el brindis cuando no hay registro o establecer la variable.

De cualquier manera, deberías limpiar tu if a algo como esto (suponiendo que desea establecer la variable):

if (cur.moveToFirst()) {
  Toast.makeText(
     getBaseContext(),
     cur.getString(0) + "  " + cur.getString(1) + "  "
     + cur.getString(2) + "  " + cur.getString(3) + "\n",
     Toast.LENGTH_LONG).show();
  } else {
     VarMin = "-150 minute";
  } 

EDITAR

Y por la forma en que está organizado su código, siempre pondrá "-140 minutos" en su base de datos. Si desea que los cambios realizados por su IF entren en la base de datos, debe moverlo antes de las operaciones de db.

contestado el 03 de mayo de 12 a las 13:05

hola, he cambiado mi código y puedo cambiar los valores en el atributo ahora, pero ¿qué pasa si planeo seguir cambiando los valores usando las declaraciones 'else if'? wad condición debo usar? porque todavía me gustaría tener la declaración 'else' para mostrar un mensaje de brindis en caso de que no se encuentre ninguna información. - hombre galleta

Espera un minuto... ¿estás intentando iterar a través de un cursor con múltiples registros? En este momento, ese código solo verifica/hace cambios para el primer registro (si existe). Tal vez explique completamente lo que está tratando de lograr aquí. - Barak

Actualmente estoy tratando de realizar una búsqueda a través de una vista que creé al combinar dos tablas diferentes según la hora y la fecha elegidas por el usuario. Hasta ahora todo funciona excepto el atributo de cadena 'VarMin' que se supone que representa cuántos minutos se deducen del tiempo elegido por el usuario. Por lo tanto, necesito crear múltiples declaraciones 'si no' para seguir cambiando el valor en 'VarMin' para acomodar el tiempo elegido por el usuario. - hombre galleta

y el valor del atributo 'VarMin' se cambia cada vez que el anterior no puede devolver ningún resultado. y la declaración 'else' es para cuando no se encuentran resultados después de que se hayan ejecutado todas las declaraciones 'else if'. - hombre galleta

Espero que entiendas lo que estoy tratando de decir. - hombre galleta

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.