我开发了我的第一个Android应用程序,它读取收到的短信执行短信中的命令,例如:
bluetooth(on);data(off);wifi(on);device(vibrate);
我将命令拆分为数组,如此
String[] array = sms.split(";");
所以我有
bluetooth(on) data(off) wifi(on) device(vibrate)
然后在循环中我对我的数组执行一些操作,如此
for(String s:array){
String function_name = s.substring(0,s.indexOf("("));
String function_arg = s.substtring(s.indexOf("(")+1,s.indexOf(")"));
}
所以对于他们中的任何一个我都有:
function = bluetooth and argument = on
function = data and argument = off
function = wifi and argument = on
function = device and argument = vibrate
现在我已经宣布了
public void Bluetooth(int arg){
//
}
public void Data(int arg){
//
}
public void Wifi(int arg){
//
}
public void Device(int arg){
//
}
我所有声明的方法都运行正常,我的意思是当我打电话给蓝牙(1)我的服务打开蓝牙或我打电话给设备(2)它将设备设置为振动模式。它没有任何问题,但是当我在循环中调用这些方法时,只有第一个执行而其他方法无声地失败。例如: 我的短信是="设备(振动);数据(开);蓝牙(关闭);" 当我在循环中执行每个命令时,只执行第一个命令(无论哪一个是第一个)而其他命令都是静默的。 我的整个代码是:
for(String function:functions){
String funcname = function.substring(0,function.indexOf("("));
String funcarg = function.substring(function.indexOf("(")+1,function.indexOf(")"));
int arg = -1;
if(funcarg.equals("on")){
arg = 1;
}else if(funcarg.equals("off")){
arg = 0;
}else if(funcarg.equals("vibrate")){
arg = 2;
}else if(funcarg.equals("normal")){
arg = 3;
}else if(funcarg.equals("silent")){
arg = 4;
}else if(funcarg.equals("in")){
arg = 5;
}else if(funcarg.equals("out")){
arg = 6;
}else if(funcarg.equals("missed")){
arg = 7;
}else if(funcarg.equals("all")){
arg = 8;
}else if(funcarg.equals("draft")){
arg = 9;
}
if(funcname.equals("bluetooth")){
Bluetooth(arg);
}else if(funcname.equals("device")){
Device(arg);
}else if(funcname.equals("data")){
Data(arg);
}else if(funcname.equals("wifi")){
Wifi(arg);
}else if(funcname.equals("unlog")){
Unlog(arg);
}else if(funcname.equals("clearsms")){
ClearSms(arg);
}else if(funcname.equals("contact")){
Contact(arg);
}else if(funcname.equals("sync")){
Sync(arg);
}
}
想象一下,我的函数是= {"bluetooth(on)","device(vibrate)","wifi(off)","data(on)",...}
我的代码应该调用bluetooth(1) device(2) wifi(0) data(1)
,但只执行第一个代码。提前谢谢。
答案 0 :(得分:0)
首先,不要使用if / elseif链,而是使用Switch语句清理代码并添加一些缩进。这使我们更容易阅读代码并为您提供帮助。
你在问题中提到了一个循环,但我在代码中看不到一个循环。这可能是你的问题,因为最后一个代码块只运行一次并退出,除非从其他地方多次调用
答案 1 :(得分:0)
也许你正在重载UI线程。尝试使用AsyncTask执行收到的命令。
答案 2 :(得分:0)
我将所有.equals()转换为.contains()然后它给了我想要的结果。