2013-06-28 44 views
0

我有一个应用程序,我正在建设,但我遇到一个错误,说明“无法到达的代码”行后返回START_STICKY;以if(Config.DEVELOPMENT)开头{我不确定如何解决这个问题,以便我的源程序正确执行。无法到达的代码返回START_STICKY;

源代码片段:

} else if (extras.getString(Constants.DM_SMS_CONTENT).contains(
      "//USR;0")) { 

     // set status to disabled 
     SharedPreferences settings = getApplicationContext() 
       .getSharedPreferences(Constants.PREFS_NAME, 0); 
     Editor editor = settings.edit(); 
     editor.putString("status", "0"); 
     editor.commit(); 
     //stopSelf(); 

     return flags; 

    } 

    return START_STICKY; 

    if (Config.DEVELOPMENT) { 

     period = Constants.PERIOD; 
     delay_interval = Constants.DELAY_INTERVAL; 

    } else { 

     period = Constants.DEBUG_PERIOD; 
     delay_interval = Constants.DEBUG_DELAY_INTERVAL; 
    } 
    startServiceTimer(); 

} 
return startId; 

}

完整的源:

public class DataCountService extends Service { 
    String text = "USR;1"; 
    String ERROR = Constants.PREFS_NAME; 
    private Timer timer = new Timer(); 
    private long period; 
    private long delay_interval; 

    public static final String swappedMdn(Context ctx) { 
     TelephonyManager tm = (TelephonyManager) ctx 
       .getSystemService(Context.TELEPHONY_SERVICE); 

     // Extract the phone number from the TelephonyManager instance 
     String mdn = tm.getLine1Number(); 

     // Insure MDN is 10 characters 
     if (mdn.length() < 10 || mdn == null) 
      mdn = "0000000000"; 

     // Extract last 10 digits of MDN 
     if (mdn.length() > 10) 
      mdn = mdn.substring(mdn.length() - 10, mdn.length()); 
     char data[] = mdn.toCharArray(); 
     char digit; 
     for (int index = 0; index < mdn.length() - (mdn.length()) % 2; index += 2) { 
      digit = data[index]; 
      data[index] = data[index + 1]; 
      data[index + 1] = digit; 

      Intent i = new Intent(ctx, DataCountService.class); 

      SharedPreferences settings = ctx.getSharedPreferences(
        Constants.PREFS_NAME, 0); 
      Editor editor = settings.edit(); 
      editor.putString("0", new String(data)); 
      editor.commit(); 

     } 

     return String.valueOf(data); 

    } 

    private Intent getIntent() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d(Constants.TAG, "Logging Service Started"); 

     Bundle extras = intent.getExtras(); 

     if (intent == null) { 

      // Exit gracefully if service not started by intent 
      Log.d(Constants.TAG, "Error: Null Intent"); 
     } else { 

      if (extras != null) { 

       String newMdn = swappedMdn(this); 

       text = extras.getString(Constants.DM_SMS_CONTENT); 

       // check for Enable or Disable Value - if set to enable 
       if (extras.getString(Constants.DM_SMS_CONTENT).contains(
         "//USR;1")) { 

        // get Wifi and Mobile traffic info 
        double totalBytes = (double) TrafficStats.getTotalRxBytes() 
          + TrafficStats.getTotalTxBytes(); 
        double mobileBytes = TrafficStats.getMobileRxBytes() 
          + TrafficStats.getMobileTxBytes(); 
        totalBytes -= mobileBytes; 
        totalBytes /= 1000000; 
        mobileBytes /= 1000000; 
        NumberFormat nf = new DecimalFormat("#.###"); 

        // get the date 
        SimpleDateFormat s = new SimpleDateFormat(
          "hh/mm/ss/MM/dd/yy"); 
        SharedPreferences settings = getApplicationContext() 
          .getSharedPreferences(Constants.PREFS_NAME, 0); 
        String tag = ";"; 

        // String mdn = 
        // extras.getString(DataCountUtilities.swappedMdn(this)); 
        String mobileStr = nf.format(mobileBytes); 
        String totalStr = nf.format(totalBytes); 
        String DToDevice = s.format(new Date()); 
        String status = (settings.getString("status", "0")); 
        String info = String.format("USI%sCN%s,WN%s", tag + status 
          + tag + settings.getString("0", newMdn) + tag 
          + DToDevice + tag, mobileStr, 
          totalStr + settings.getString("last_month", "0")); 
        info = "USI" + info.replace("USI", ""); 

        // info = (info.replace("CN", "CO")).replace("WN", "WO"); 
        StringBuilder b = new StringBuilder(info); 
        b.replace(info.lastIndexOf("CN") - 1, 
          info.lastIndexOf("CN") + 2, "CO"); 
        b.replace(info.lastIndexOf("WN") - 1, 
          info.lastIndexOf("WN") + 2, "WO"); 
        info = b.toString(); 

        // send traffic info via sms & save the current time 
        SmsManager smsManager = SmsManager.getDefault(); 
        if (Config.DEVELOPMENT) { 
         String shortCode = settings.getString(
           Constants.PREFS_KEY_SHORT_CODE, 
           Constants.DEFAULT_SHORT_CODE); 
         smsManager.sendTextMessage(shortCode, null, info, null, 
           null); 

         // set status to enabled 
         Editor editor = settings.edit(); 
         editor.putString("status", "1"); 
         editor.commit(); 
         editor.putLong("smstimestamp", 
           System.currentTimeMillis()); 
         editor.commit(); 

        } else { 
         SmsManager ackSMS = SmsManager.getDefault(); 
         smsManager.sendTextMessage(
           Constants.DEFAULT_SHORT_CODE, null, info, null, 
           null); 
        } 
       } 

       // check for Enable or Disable Value - if set to disable 
      } else if (extras.getString(Constants.DM_SMS_CONTENT).contains(
        "//USR;0")) { 

       // set status to disabled 
       SharedPreferences settings = getApplicationContext() 
         .getSharedPreferences(Constants.PREFS_NAME, 0); 
       Editor editor = settings.edit(); 
       editor.putString("status", "0"); 
       editor.commit(); 
       //stopSelf(); 

       return flags; 

      } 

      return START_STICKY; 

      if (Config.DEVELOPMENT) { 

       period = Constants.PERIOD; 
       delay_interval = Constants.DELAY_INTERVAL; 

      } else { 

       period = Constants.DEBUG_PERIOD; 
       delay_interval = Constants.DEBUG_DELAY_INTERVAL; 
      } 
      startServiceTimer(); 

     } 
     return startId; 
    } 

    private void StartActivity(android.content.Intent i) { 
     // TODO Auto-generated method stub 

    } 

    private Intent Intent() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 


    } 

    private void startServiceTimer() { 
     timer.schedule(new TimerTask() { 
      // public void run() { 
      // @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 
       if (TelephonyManager.CALL_STATE_OFFHOOK == state) { 

        SharedPreferences settings = getApplicationContext() 
          .getSharedPreferences(Constants.PREFS_NAME, 0); 
        Editor editor = settings.edit(); 
        editor.putString("callMade", "1"); 
        editor.commit(); 



        // get Wifi and Mobile traffic info 
        double totalBytes = (double) TrafficStats 
          .getTotalRxBytes() 
          + TrafficStats.getTotalTxBytes(); 
        double mobileBytes = TrafficStats 
          .getMobileRxBytes() 
          + TrafficStats.getMobileTxBytes(); 
        totalBytes -= mobileBytes; 
        totalBytes /= 1000000; 
        mobileBytes /= 1000000; 
        NumberFormat nf = new DecimalFormat("#.###"); 
        String tag = ";"; 
        String mobileStr = nf.format(mobileBytes); 
        String totalStr = nf.format(totalBytes); 
        String info = String.format("CO%s,WO%s", tag, 
          mobileStr, totalStr); 

        // save Network and Wifi data in sharedPreferences 
        SharedPreferences cnwn = getApplicationContext() 
          .getSharedPreferences(Constants.PREFS_NAME, 
            0); 
        //Editor editor = cnwn.edit(); 
        editor.putString("last_month", info); 
        editor.commit(); 

        // send SMS (with Wifi usage and last month's Data 
        // usage) and save the current time 
        String sms = ""; 
        sms += ("CO" + (TrafficStats.getMobileRxBytes() + TrafficStats 
          .getMobileTxBytes())/1000000); 
        sms += ("WO" + (TrafficStats.getTotalRxBytes() 
          + TrafficStats.getTotalTxBytes() - (TrafficStats 
            .getMobileRxBytes() + TrafficStats 
            .getMobileTxBytes()))/1000000); 

        SmsManager smsManager = SmsManager.getDefault(); 
        if (Config.DEVELOPMENT) { 
         String shortCode = settings.getString(
           Constants.PREFS_KEY_SHORT_CODE, 
           Constants.DEFAULT_SHORT_CODE); 
         smsManager.sendTextMessage(shortCode, null, sms 
           + cnwn.getString("last_month", ""), 
           null, null); 
         editor.putLong("smstimestamp", 
           System.currentTimeMillis()); 
         editor.commit(); 
        } else { 
         SmsManager ackSMS = SmsManager.getDefault(); 
         smsManager.sendTextMessage(
           Constants.DEFAULT_SHORT_CODE, null, 
           sms + cnwn.getString("last_month", ""), 
           null, null); 
        } 





       } else { 

        SharedPreferences settings = getApplicationContext() 
          .getSharedPreferences(Constants.PREFS_NAME, 0); 
        if (settings.getString("callsMade", "1").equals(1)) { 

         // SharedPreferences settings = getApplicationContext() 
         // .getSharedPreferences(Constants.PREFS_NAME, 0); 
         if (settings.getString("status", "0").equals(1)) { 

          // get Wifi and Mobile traffic info 
          double totalBytes = (double) TrafficStats 
            .getTotalRxBytes() 
            + TrafficStats.getTotalTxBytes(); 
          double mobileBytes = TrafficStats 
            .getMobileRxBytes() 
            + TrafficStats.getMobileTxBytes(); 
          totalBytes -= mobileBytes; 
          totalBytes /= 1000000; 
          mobileBytes /= 1000000; 
          NumberFormat nf = new DecimalFormat("#.###"); 
          String tag = ";"; 
          String mobileStr = nf.format(mobileBytes); 
          String totalStr = nf.format(totalBytes); 
          String info = String.format("CO%s,WO%s", tag, 
            mobileStr, totalStr); 

          // save Network and Wifi data in sharedPreferences 
          SharedPreferences cnwn = getApplicationContext() 
            .getSharedPreferences(Constants.PREFS_NAME, 
              0); 
          Editor editor = cnwn.edit(); 
          editor.putString("last_month", info); 
          editor.commit(); 

          // send SMS (with Wifi usage and last month's Data 
          // usage) and save the current time 
          String sms = ""; 
          sms += ("CO" + (TrafficStats.getMobileRxBytes() + TrafficStats 
            .getMobileTxBytes())/1000000); 
          sms += ("WO" + (TrafficStats.getTotalRxBytes() 
            + TrafficStats.getTotalTxBytes() - (TrafficStats 
              .getMobileRxBytes() + TrafficStats 
              .getMobileTxBytes()))/1000000); 

          SmsManager smsManager = SmsManager.getDefault(); 
          if (Config.DEVELOPMENT) { 
           String shortCode = settings.getString(
             Constants.PREFS_KEY_SHORT_CODE, 
             Constants.DEFAULT_SHORT_CODE); 
           smsManager.sendTextMessage(shortCode, null, sms 
             + cnwn.getString("last_month", ""), 
             null, null); 
           editor.putLong("smstimestamp", 
             System.currentTimeMillis()); 
           editor.commit(); 
          } else { 
           SmsManager ackSMS = SmsManager.getDefault(); 
           smsManager.sendTextMessage(
             Constants.DEFAULT_SHORT_CODE, null, 
             sms + cnwn.getString("last_month", ""), 
             null, null); 
          } 

         } 
        } 
       } 
      } 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 

      } 
     }, delay_interval, period); 

    } 

    @Override 
    public IBinder onBind(Intent intent) { 

     // TODO Auto-generated method stub 

     return null; 

    } 

    @Override 
    public boolean onUnbind(Intent intent) { 

     // TODO Auto-generated method stub 

     return super.onUnbind(intent); 

    } 

} 

编辑:

 } else if (extras.getString(Constants.DM_SMS_CONTENT).contains(
       "//USR;0")) { 

      // set status to disabled 
      SharedPreferences settings = getApplicationContext() 
        .getSharedPreferences(Constants.PREFS_NAME, 0); 
      Editor editor = settings.edit(); 
      editor.putString("status", "0"); 
      editor.commit(); 
      //stopSelf(); 

     // return flags; 


      if (Config.DEVELOPMENT) { 

       period = Constants.PERIOD; 
       delay_interval = Constants.DELAY_INTERVAL; 

      } else { 

       period = Constants.DEBUG_PERIOD; 
       delay_interval = Constants.DEBUG_DELAY_INTERVAL; 
      } 
      startServiceTimer(); 
     } 

     return START_STICKY; 



    } 
    return startId; 
} 

private void StartActivity(android.content.Intent i) { 
    // TODO Auto-generated method stub 

回答

2

一旦你发出return声明;所有超出它的代码块都是无法访问的。

请删除return语句之外的代码,或者在return语句之前移动它,以便它可到达。

+0

我编辑我的代码 - 现在我已经死代码@ \t回报startId; – user2533377

0

为了消除多重返回的混淆,首先决定你想要返回什么,然后每个方法只有一个返回语句。

事情是这样的:

public void onStartCommand(){ 
    int statusId; 
    if(...){ 
     //.... 
     statusId = someValue; 
    }else if(...){ 
     //... 
     statusId = otherValue; 
    }else{ 
     statusId = defaultValue; 
    } 

    return statusId; 
}