2013-06-20 80 views
0

我收到一条错误消息,指出“SharedPreferences类型中的方法getLong(String,long)不适用于参数(字符串)“在线(一路在我的代码的末尾):SharedPreferences类型中的方法getLong(String,long)不适用于参数(字符串)

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

,请参阅Java API:http://developer.android.com/reference/android/content/SharedPreferences.html#getLong(java.lang .String,long)它应该接受**两个**参数。 **正如编译器告诉你的那样。通过** 0 **作为第二个参数。 – Maroun

回答

1

如果没有找到问题的关键"smstimestamp"它返回一个默认值,在这种情况下0

long oldTime = pref.getLong("smstimestamp", 0); 
1

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

abstract long getLong(String key, long defValue) 

所以,调用getLong()具有一定默认属性(取决于你所期望的,当存在首选项也许只是0-1没有价值)。

0

当您尝试访问共享首选项中的值时,它需要一个默认值(如果未找到该项)。因此请将其更改为:

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

其中0是所需的默认值。

利用DefValue:值返回如果此偏好不存在

0

类SharedPreferences有一个方法getLong(字符串,长)具有两个参数。哟不能只用一个参数来调用它。

第二个参数(长),如果没有“首选项”和“smstimestamp”,可能是返回的默认值。把任何值(0或1),并确认返回值

long oldTime = pref.getLong("smstimestamp"-1); 
if (oldTime==-1) { 
    // There is no smstimestamp 
} 
相关问题