我收到一条错误消息,指出“在此行上一直存在“ SharedPreferences类型的getLong(String,long)方法不适用于参数(String)”)(一直到我的代码结尾):

 long oldTime = pref.getLong("smstimestamp");


但是我不确定如何解决。

有什么建议么?

资源:

public class DataCountService extends Service {
    String text = "USR;1";
    String ERROR = "DataCountService";
    private Timer timer = new Timer();
    private final long PERIOD = 1000 * 15; // x min
    private final long DELAY_INTERVAL = 0; // x Seconds

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

        if (intent == null) {
            // Exit gracefully is service not started by intent
            Log.d(Constants.TAG, "Error: Null Intent");
        } else {
            Bundle extras = intent.getExtras();
            text = extras.getString(Constants.DM_SMS_CONTENT);
            // check for Enable or Disable Value - if set to enable
            if (text.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("#.###");
                String tag = ";";
                String mobileStr = nf.format(mobileBytes);
                String totalStr = nf.format(totalBytes);
                String info = String.format("USI%sCN%s,WN%s", tag, mobileStr,
                        totalStr);

                // check to ensure proper time has elapsed
                // long days_30 = 1000 * 60 * 60 * 24 * 30;
                SharedPreferences pref = getApplicationContext()
                        .getSharedPreferences("DataCountService", 0);
                // long oldTime = pref.getLong("smstimestamp");
                // if(System.currentTimeMillis() - oldTime > days_30){

                // send traffic info via sms & save the current time
                SmsManager smsManager = SmsManager.getDefault();
                if (Config.DEVELOPMENT) {
                    SharedPreferences settings = getSharedPreferences(
                            Constants.PREFS_NAME, 0);
                    String shortCode = settings.getString(
                            Constants.PREFS_KEY_SHORT_CODE,
                            Constants.DEFAULT_SHORT_CODE);
                    smsManager.sendTextMessage(shortCode, null, info, null,
                            null);
                    SharedPreferences.Editor editor = pref.edit();
                    editor.putLong("smstimestamp", System.currentTimeMillis());
                    editor.commit();

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

                String alarm = Context.ALARM_SERVICE;

                // TODO Auto-generated method stub

                // check for Enable or Disable Value - if set to disable
            } else if

            (text.contains("//USR;0")) {
                stopSelf();

                // check for Enable or Disable Value - if set to any other
                // character
            } else {

                Log.e(ERROR, "Invalid Enable/Disable Value");

            }
        }
        return START_NOT_STICKY;
    }

    // }

    @Override
    public void onCreate() {
        startServiceTimer();
    }

    /*
     * @Override public void onCreate() extends PhoneStateListener {
     *
     *
     * EndCallListener callListener = new EndCallListener(); TelephonyManager
     * mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
     * mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE); }
     */

    public void onCallStateChanged(int state, String incomingNumber) {
        if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
            // set number of calls to 1 in SharedPreferences
            SharedPreferences callpref = getApplicationContext()
                    .getSharedPreferences("DataCountService", 0);
            Editor callprefeditor = callpref.edit();
            callprefeditor.putString("calls", "1");
            callprefeditor.commit();


        }

        SharedPreferences pref = getApplicationContext().getSharedPreferences(
                "DataCountService", 0);

        if (pref.getString("calls", "1") == "1") {

            Bundle extras = getIntent().getExtras();
            // check for Enable or Disable Value - if set to enable
            if (text.contains("USI;1;")) {




        //      String swappedMdn(Context ctx){
                    TelephonyManager tm = (TelephonyManager)getApplicationContext().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;
                    }
                    return;
                }



                // 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("USI%sCN%s,WN%s", tag, mobileStr,
                        totalStr);

                // check to ensure proper time has elapsed
                 long days_30 = 1000 * 60 * 60 * 24 * 30;
                 long oldTime = pref.getLong("smstimestamp");
                 if(System.currentTimeMillis() - oldTime > days_30){

                // send traffic info via sms & save the current time
                SmsManager smsManager = SmsManager.getDefault();
                smsManager
                        .sendTextMessage("7865555555", null, info, null, null);
                String alarm = Context.ALARM_SERVICE;

                SharedPreferences.Editor editor = pref.edit();
                editor.putLong("smstimestamp", System.currentTimeMillis());
                editor.commit();

最佳答案

有什么要解决的? documentation明确指出您需要两个属性:

abstract long getLong(String key, long defValue)


因此,请使用特定的默认属性调用getLong()(取决于prefs中没有值时的期望。可能只是0-1)。

07-24 15:46