Checking to ensure at least one call has been made prior to executing - This method must return a result of type int

StackOverflow https://stackoverflow.com/questions/17353557

Question

I'm building an app that collects the wifi and cell data usage amount and sends it via SMS - this is all working fine. My trouble lies in the fact that I'm attempting to implement a method of checking to ensure at least one phonecall has been made from the device before doing anything else and I'm running into a few issues.

ERROR:

This method must return a result of type int

ERROR LOCATION:

public int onStartCommand(Intent intent, int flags, int startId, int state, String incomingNumber)

ATTEMPTED ERROR RESOLUTION:

Add a return method - return state;

PROBLEM WITH ATTEMPTED ERROR RESOLUTION:

There is already a return method

SOURCE:

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

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

        }

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

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

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

    }

    }

SOURCE AFTER EDIT:

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

        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{

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

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

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

            }

        }
Was it helpful?

Solution

Its kind of hard to read the way its formatted but it looks like this method is the problem

 public int onStartCommand(Intent intent, int flags, int startId, int state,

it looks like the return statement is in the wrong part. Move it after the next bracket. This

return startId;
}
}

to this

}
return startId; 
}

You should try to format your code a little better when you post but it looks like it might be inside of an else so it may never be reached. If you only want it to return startId if some condition is met then you can leave it how it is but put a default return statement to return some int if the condition isn't met

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top