2013-06-27 35 views
1

我試圖從SharedPreferences中提取字節切換的MDN值,但它繼續返回零值 - 當它應該返回字節切換的MDN時。SharedPreferences值繼續返回爲零 - 無法檢索'數據'字符串的值

我使用以下格式保存它:

editor.putString(new String("data"), Integer.toString(0)); 

,並使用以下格式得到它:

String info = String.format("USI%sCN%s,WN%s", tag + status 
         + tag + settings.getString("data", Integer.toString(0)) + tag + DToDevice + tag, mobileStr, 
         totalStr + settings.getString("last_month", "0")); 

但是價值contiues返回零,而不是byteswapped MDN作爲我期望。

如何通過SharedPreferences保存和檢索byteswapped MDN值的值?

來源:

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(new String("data"), Integer.toString(0)); 
      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"); 
    // super.onStartCommand(intent, flags, startId); 

    Bundle extras = intent.getExtras(); 

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

     if (extras != null) { 
      text = extras.getString(Constants.DM_SMS_CONTENT); 
      // check for Enable or Disable Value - if set to enable 
      // 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("#.###"); 

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

       StartActivity(i); 

       Intent MDN = new Intent(this, MDNByteswapService.class); 

       StartActivity(MDN); 

       // 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("data", Integer.toString(0)) + 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(); 

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

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

} 

} 

回答

0

那麼,如果你總是

editor.putString(new String("data"), Integer.toString(0)) 

那麼你只打算出去零(因爲你只是把Integer.toString(0) ......)輸入數據

+0

我試圖保存我認爲是數據的mdn的值 - 所以除了顛倒這兩個值的順序之外 - 還有什麼我應該做的嗎? – user2528574

+0

我試過editor.putString(Integer.toString(0),Integer.toString(data));但我得到Integer類型的toString(int)方法不適用於參數,並且不適用於參數和\t editor.putString(Integer.toString(0),(「data」));我再次得到零 – user2528574

+0

我只是試圖得到byteswapped MDN的值(我相信應該可以通過字符串引用:數據) – user2528574