【问题标题】:executing heavy-processing methods in loop在循环中执行繁重的处理方法
【发布时间】:2014-07-15 09:18:33
【问题描述】:

我开发了我的第一个 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),但只执行第一个。提前致谢。

【问题讨论】:

    标签: java android loops methods


    【解决方案1】:

    也许您正在超载 UI 线程。尝试使用AsyncTask 执行接收到的命令。

    【讨论】:

    【解决方案2】:

    首先,不要使用那些 if/elseif 链,而是使用 Switch 语句来清理代码并添加一些缩进。这使我们更容易阅读代码并为您提供帮助。

    您在问题中提到了一个循环,但我在您的代码中看不到一个循环。这可能是您的问题,因为最后一个代码块只会运行一次并退出,除非从其他地方多次调用它

    【讨论】:

    • eclipse 不允许我对字符串使用 swtich 语句。
    • 抱歉,最近用VB太多了。你是对的,这是不可能的。
    • 没关系。我的代码似乎是写的,因为当我为它运行的每个命令吐司一条消息但这里失败了
    • 问题是没有循环。不管你给它多少个参数,它只会在代码中运行一次。
    • 我认为你看不到那里的声明有点循环
    【解决方案3】:

    我将所有 .equals() 转换为 .contains() 然后它给了我想要的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2016-07-08
      • 2015-01-17
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多