2013-06-26 80 views
-1

獲取上線的錯誤:問題格式化變量的初始化在服務

String mdn = (settings.getString("mdn", mdn)); 

指出:局部變量MDN可能沒有被初始化

的問題是,如果我捆綁額外= intent.getExtras();就在這條線的上方,我最終得到了「重複的局部變量extras」錯誤 - 如果我刪除Bundle Extras的第一個實例 - 我會得到更多這些相同的錯誤。我只是需要一些幫助格式化它,所以它會執行沒有任何錯誤。

任何輸入,非常感謝。

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; 



    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 = (settings.getString("mdn", mdn)); 
        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 + mdn + 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_NOT_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); 

    } 

} 

源之後第一次編輯:

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; 

    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 = (settings.getString("mdn", 
          "some_default_value_here")); 
        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 + mdn + 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_NOT_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); 

    } 

} 

服務節省了MDN在SharedPreferences:

public class DataCountUtilities extends Service { 

    // swap the content of a string by switching place 
    // each pair of consecutive characters 
    // If string length is odd last character is left in place 
    public 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); 
      // i.putExtra("key", mdn); 
      // tartActivity(i); 

      SharedPreferences settings = getApplicationContext() 
        .getSharedPreferences(Constants.PREFS_NAME, 0); 
      Editor editor = settings.edit(); 
      editor.putString("mdn", mdn); 
      editor.commit(); 

     } 

     return String.valueOf(data); 

    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    // private void startActivity(Intent i) { 
    // TODO Auto-generated method stub 

} 

回答

0

您還沒有初始化MDN呢。你不能創造一些東西並在創作中使用它。例如:

int x = 1+x;//how does the compiler know what x is? 

您不能在int x的初始化中創建use x,因爲它不存在。請記住,Java是區分大小寫的。你可能意味着:

String mdn = settings.getString("mdn", "default_string"); 

看一看的API:

http://developer.android.com/reference/android/content/SharedPreferences.html#getString%28java.lang.String,%20java.lang.String%29

0

你不能聲明和一行像使用一個變量:

String mdn = (settings.getString("mdn", mdn)); 

getString中的第二個參數是默認值 - 如果沒有帶「mdn」鍵的條目,那就是您將從getString接收的值。

那麼你或許應該替換符合:

String mdn = (settings.getString("mdn", "some_default_value_here")); 

或聲明並初始化MDN之前:我不知道你在哪裏,你提到「some_default_value_here」 我

String mdn = "some_default_value"; 
mdn = (settings.getString("mdn", mdn)); 
+0

m將它保存在另一個服務中使用: SharedPreferences設置= getApplicationContext() \t \t \t \t \t .getSharedPreferences(Constants.PREFS_NAME,0); \t \t \t Editor editor = settings.edit(); \t \t \t editor.putString(「mdn」,mdn); \t \t \t編輯。承諾(); 當我嘗試檢索它與some_default_value_here交換出來匹配 - 它不工作: String mdn =(settings.getString(「mdn」,mdn)); – user2525683

+0

'getString'需要返回一些東西。它帶來的好處是,如果找不到該鍵的值,它可以返回一個默認值。如果你說你在閱讀之前總是爲該鍵寫入一些值,那麼你可以傳遞null(或任何字符串值),因爲你會得到另一個值。是否有意義? – gunar

+0

是的 - 但我總是保存MDN - 這是電話號碼 - 它不應該爲空 P.S. 由於某種原因,我仍然沒有從第二個服務中獲取字節數的MDN - 它只是在短信中顯示爲「some_default_value_here」,我應該有一個字節碼的MDN,而不是 – user2525683