Java 在Android中执行查询时,在“else if”语句中放置适当条件时出现问题
我试图使用elseif语句更改应用程序中同一字符串属性中的值,但到目前为止遇到了一些问题。到目前为止,我还不能改变这些值。这是我代码的重要部分。有什么建议吗Java 在Android中执行查询时,在“else if”语句中放置适当条件时出现问题,java,android,database,string,if-statement,Java,Android,Database,String,If Statement,我试图使用elseif语句更改应用程序中同一字符串属性中的值,但到目前为止遇到了一些问题。到目前为止,我还不能改变这些值。这是我代码的重要部分。有什么建议吗 protected void ScheduleOp1() { // TODO Auto-generated method stub String VarMin = "-140 minute"; db.execSQL("DROP VIEW IF EXISTS " + view_Schedule1); db.execS
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();
}
}
希望你们能帮我
-更新-
下面是代码的更新。我试图做的是不断更改“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);
}
}
希望你们能帮我
-更新-
下面是完整代码的更新
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您是否尝试过使用全局变量,如私有字符串VarMin=-140分钟 你的if毫无意义。。。moveToFirst要么为true,要么为false,表示未返回任何记录。基本上,你现在所拥有的永远不会显示未找到的吐司 因此,不清楚是否要在没有记录时显示toast,或者设置变量 无论哪种方式,您都应该将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";
}
编辑
按照代码的排列方式,您总是要在数据库中输入-140分钟。如果希望If所做的更改进入数据库,则需要在db操作之前将其移动。编辑:我添加了用于管理查询的代码
你可以做些什么:
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();
}
}
首先,您可以简单地使用“else”,而不是“else-ifcur.moveToFirst==false”,因为如果它不是真的,那么它必须是假的。不管怎样,你面临的问题是什么?您的“VarMin”变量没有更改?通过在控制台中打印来检查'cur.moveToFirst'的值。嗨,我不能将其更改为'else',因为我正在使用它,以防检索不到任何信息。如果在以前的检索中找不到任何信息,是否有更好的方法引用multiple-else-if语句的条件以不断更改“VarMin”属性中的值?我试图复制并粘贴“if”语句中的toast,但收到一个异常错误。。有什么建议吗?好吧,让我们回到最基本的方面。你说你在搜索,但我看不出有什么比较。当你的搜索成功时,你在搜索/比较什么来定义?嘿,谢谢!我设法更改了值,但是有没有更好的方法来更改'else if'语句的条件?因为现在我的'else'语句根本不起作用..如果这不能解决您的问题,它不应该是可接受的答案。您好,我已经更改了代码,现在可以更改属性中的值,但是如果我计划继续使用'else If'语句更改值呢?我应该使用wad条件吗?因为我仍然希望使用“else”语句显示toast消息,以防完全找不到任何信息。请稍候。。。您正在尝试使用多条记录遍历游标吗?现在,代码只检查/更改第一条记录(如果存在)。也许可以充分解释一下您在这里要完成的任务。我目前正在尝试通过一个视图执行搜索,该视图是我根据用户选择的时间和日期将两个不同的表组合在一起创建的。到目前为止,除了“VarMin”string属性之外,其他一切都正常工作,该属性假定表示从用户选择的时间中扣除多少分钟。因此,我需要创建多个“else if”语句来不断更改“VarMin”中的值,以适应用户选择的时间。并且,只要前一个语句无法返回任何结果,“VarMin”属性值就会更改。“else”语句用于运行所有“else-if”语句后完全找不到结果的情况。希望您理解我的意思。嗨,我尝试过使用它,但应用程序刚刚挂起。对于游标cur=null,它应该与cur.moveToFirst使用的“cur”相同吗;?我有点困惑,我再次尝试了代码,它成功地更改了int值。但是现在,当我选择一个不返回任何结果的时间时,应用程序就会过时并崩溃。else语句似乎包含错误。有什么办法可以解决这个问题吗?你能用你当前的代码更新你的帖子吗?上面的代码不是绝对的答案,你必须调整它以适应你所寻找的…嗨,我已经更新了完整的代码以及代码的重要部分。目前只有else语句有问题,因为它无法捕获异常并导致应用程序挂起然后崩溃。有什么建议吗?有点不对劲,可能是因为我一点也不清楚。切换方法允许您 如果没有结果,调整时间。因此,如果当前值为145,并且没有结果,那么我们继续使用150 ect。。。最后一步是200,但您永远不会影响变量的200。因此,添加案例180:mMinutes=200;休息一下,它就会工作