2013-06-27 206 views
0

我收到两个错误,说明swappedMdn无法在尝试为swappedMdn返回值时解析为变量。swappedMdn无法解析为变量

我不确定我在做什么错误,因为它出现(对我)我正在尝试,保存并正确地获取swappedMdn - 但沿线的某处出错了。

任何帮助,非常感谢。

SNIPPET 1:(MDN值被建立在这里)

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(Integer.toString(0), swappedMdn); 
       editor.commit(); 

     } 

     return String.valueOf(data); 

    } 

SNIPPET 2:(MDN值被检索这里)

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

完整源:

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

可能重复继续返回零 - 无法检索'数据'字符串的值](http://stackoverflow.com/questions/17349659/sharedpreferences-value-continues-to-return-as-zero-cannot-retrieve-value-of) – kosa

+0

这将是一件容易得多的如果你首先将你的代码片段缩减到最相关的部分(比如你尝试使用vavriable和它被声明/初始化的地方),我们会提供帮助。我甚至没有在任何地方看到它。你能指出你认为你在做什么吗? – codeMagic

+0

更新! (谢谢你codeMagic) – user2528574

回答

0

这里

editor.putString(Integer.toString(0), swappedMdn); 

你试图使用这个“变量”swappedMdn这实际上是一个函数,你在里面......不是varibale。我不知道你的意思是infomdn或其他什么,但swappedMdn是不是一个变量它的功能。

而且,不是这个问题,但我不知道为什么你必须接受一个Context为参数的函数,因为Service有[SharedPreferences值的自己的Context

+0

好吧 - 公共静态最终字符串swappedMdn让我觉得我可以使用swappedMdn作为一个字符串。如何在MDN被字节切换之后检索MDN的值?那会是'数据'吗? – user2528574

+0

可能。调试,看看这是否是你期望的值 – codeMagic

+0

发生了一些奇怪的事情 - 我在下面一行设置了一个断点:TelephonyManager tm =(TelephonyManager)ctx 而不是在我开始调试时移动到那条线我得到一个错误,指出类文件编辑:来源未找到 任何想法可能是什么原因造成的? – user2528574