无法访问的代码 - 返回startId;

时间:2013-06-28 17:33:05

标签: java android return unreachable-code

我正在尝试在我的源代码中添加一些功能来记录在我执行其余代码之前至少打了一个电话的事实(它收集了总数量的wifi和单元数据使用并通过短信)然而当我添加代码以保存至少一个电话已被发出的事实我最终得到一个错误,指出“无法访问的代码 - 返回startId;”而且我不确定是什么导致了这个问题。

提前致谢!

消息来源:无法访问代码 - 返回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;
}

public int onStartCommand(Intent intent, int flags, int startId, int state,
        String incomingNumber) {
    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) {

            if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
                // wait for phone to go offhook (probably set a boolean
                // flag) so you
                // know your app initiated the call.
                // Log.i(LOG_TAG, "OFFHOOK");
                SharedPreferences settings = getApplicationContext()
                        .getSharedPreferences(Constants.PREFS_NAME, 0);
                Editor editor = settings.edit();
                editor.putString("callMade", "1");
                editor.commit();

            } else {

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

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

                    String tag = ";";
                    String mobileStr = nf.format(mobileBytes);
                    String totalStr = nf.format(totalBytes);
                    String DToDevice = s.format(new Date());
                    SharedPreferences settings = getApplicationContext()
                            .getSharedPreferences(Constants.PREFS_NAME, 0);
                    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 START_STICKY;

    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() {

    if (Config.DEVELOPMENT) {

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

    } else {
        Bundle extras = getIntent().getExtras();
        period = Constants.DEBUG_PERIOD;
        delay_interval = Constants.DEBUG_DELAY_INTERVAL;
    }
    startServiceTimer();
}

private void startServiceTimer() {
    timer.schedule(new TimerTask() {
        public void run() {

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

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

}

}

新代码/错误之前的来源(工作精细):

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

        if (Config.DEVELOPMENT) {

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

        } else {
            Bundle extras = getIntent().getExtras();
            period = Constants.DEBUG_PERIOD;
            delay_interval = Constants.DEBUG_DELAY_INTERVAL;
        }
        startServiceTimer();
    }

    private void startServiceTimer() {
        timer.schedule(new TimerTask() {
            public void run() {

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

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

    }

    }

3 个答案:

答案 0 :(得分:7)

只需保留一个return

return START_STICKY;

return startId;

答案 1 :(得分:6)

是的,看看这段代码:

return START_STICKY;

return startId;

你怎么期望得到第二个声明?您实际想要返回哪个值?删除你不想要的陈述。

这是一个很好的例子,说明编译器真正从你自己那里拯救你 - 你的代码没有意义,因此编译器阻止你运行这段代码是有帮助的。

您还应退后一步,找出您无法自行诊断的原因:

  • 您是否了解错误消息?
  • 您是否仔细检查了相关代码?
  • 您是否尝试了解 可以到达无法访问的代码?

尝试从这类事物中学习总是一个好主意。如果您不熟悉可访问性,请查看JLS section 14.21

答案 2 :(得分:0)

您不能多次返回。如果返回一个将结束方法的值......那么下一个返回将不会被执行..

return START_STICKY;  // at this line method will be exited

return startId;  // this will never executed