2012-05-03 4 views
0

else ifステートメントを使用してアプリケーションで同じString属性の値を変更しようとしていますが、今まで私は値を変更することができませんでした。ここに私のコードの重要な部分があります。助言がありますか?'else if'ステートメントに適切な条件を設定して、Androidでクエリを実行する際の問題

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(); 
    } 
} 

あなたが私を助けてくれることを願っています。

--Updated--

ここでは、コードの更新です。私がしようとしていることは、作成したビューを通して検索を実行するために、常に 'VarMin'の値を変更することです。 'else'ステートメントは、結果が全く見つからないときのためのステートメントです。

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); 
      } 

    } 

あなたが私を助けてくれることを願っています。

--update - ここ

フルコードの更新です。

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); 
      } 



    } 

そしてここでコード

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(); 
       } 
    } 

の重要な部分に更新され君たちが私を助けることができる願っています。 Thx

+0

'の場合は、他の(cur.moveToFirst()== false)を' あなたは真でない場合はfalseでなければならないので、単に 'else'を使うことができます。とにかくあなたが直面している問題は何ですか?あなたのVarMin変数は変更されていませんか?コンソールで印刷することによって 'cur.moveToFirst()'の値を確認してください。 – Antrromet

+0

こんにちは、私は他の情報に変更することはできません。前回の検索で見つかった情報がない場合、 'VarMin'属性の値を変更し続けるために、複数のelse if文の条件を引用する良い方法がありますか?私は 'if'ステートメントからトーストをコピー&ペーストしようとしましたが、例外エラーが発生しました。どのような提案ですか? – CookieMan

+0

元に戻ってみましょう。あなたは検索していると言いますが、私は比較を行っていません。あなたの検索が成功したときを定義するために何を探しているのですか? – Barak

答えて

0

編集:私はあなたができる

何かあなたのクエリを管理するためのコードを追加しました:代わりに、まず

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(); 
    } 
} 
+0

こんにちは、私はこれを使用しようとしましたが、アプリケーションがハングアップしました。カーソルcur = null; cur.moveToFirst();に使用されているものと同じ 'cur'であるはずですか?私はちょっと混乱しています – CookieMan

+0

こんにちは、私は再びコードを試して、それはint値を変更することができました。しかし、今私は結果を返していない時間を選択すると、アプリケーションが失速し、クラッシュします。 else文にエラーが含まれているようです。これを修正する方法はありますか? – CookieMan

+0

あなたのポストをあなたの現在のコードで更新できますか?上記のコードは絶対的な答えではありません。あなたが探しているものにそれを適応させる必要があります... –

0

private String VarMin = "-140 minute";のようなグローバル変数を使用しようとしましたか?

+0

ねえ、thx!私は値を変更することができましたが、 'else if'ステートメントの条件を変更するより良い方法はありますか?今、私の 'else'ステートメントがまったく動作していません。 – CookieMan

+0

これで問題が解決しなかった場合、それは受け入れられた回答ではありません。 – Barak

0

if意味がありません... moveToFirstが真、または偽(つまり、レコードが返されなかったことを意味します)。基本的には、あなたが今持っているものはNEVERは「見つからない」トーストを示します。

このため、レコードがないときにトーストを表示するか、変数を設定するかは明確ではありません。

あなたはこのような何かにあなたのifをクリーンアップする必要がありますいずれかの方法では、(あなたが変数を設定したいと仮定します):

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"; 
    } 

EDIT

そして、あなたのコードが配置されている方法で、あなたは常にありますあなたのデータベースに "-140 Minute"を入れようとします。あなたのIFによって行われた変更がデータベースに入るようにするには、db操作の前にそれを移動する必要があります。

+0

こんにちは、私は私のコードを変更して、私は属性の値を変更することができますが、私は 'else if'ステートメントを使って値を変更し続けるつもりですか?私は使用する必要がありますか?私はまだ情報がまったく見つからない場合にトーストメッセージを表示するために 'else'ステートメントを持ちたいと思うので。 – CookieMan

+0

待ち時間 - 複数のレコードを持つカーソルを繰り返し処理しようとしていますか?今のところ、コードは最初のレコード(存在する場合)のみをチェック/変更します。おそらくあなたがここで達成しようとしていることを完全に説明します。 – Barak

+0

私は現在、ユーザーが選択した時間と日付に基づいて2つの異なるテーブルを組み合わせて作成したビューを使って検索を実行しようとしています。これまでのところ、すべての機能は 'VarMin'文字列属性を除いて動作します。この属性は、ユーザーが選択した時間から何分を差し引くかを表します。したがって、私は複数の 'else if'ステートメントを作成して、ユーザーが選択した時間に合わせて 'VarMin'の値を変更し続ける必要があります。 – CookieMan

関連する問題