Bundle extra返回Nothing,无法在Activity和Service之间传递数据

时间:2014-05-30 17:52:52

标签: java android

请将值从活动传递到服务时出现问题。在我的活动中,我有文本视图字段的值,我将它们传递给服务类,如是

                 intent =new Intent(getApplicationContext(), SaveService.class);                             
         intent.putExtra("lt",latituteField.getText().toString().trim() );                  
         intent.putExtra("lg",longitudeField.getText().toString().trim()); 
         intent.putExtra("sp",SpeedField.getText().toString().trim());
         intent.putExtra("alt",AltitudeField.getText().toString().trim());
         intent.putExtra("ltDMS",lbllatitude.getText().toString().trim());
             intent.putExtra("lgDMS",lbllongitude.getText().toString().trim());
         intent.putExtra("Add",AddressLabel.getText().toString().trim());
         intent.putExtra("TNum",TNumber);

这段代码在我的MainActivityClass中,现在在我的服务类中,我有这个

  @Override
public int onStartCommand(Intent intent, int flags, int startId) {

     Bundle extras = intent.getExtras();
      if (extras != null)
      LAT= extras.getString("lt");
     LNGT= extras.getString("lg");
      SPEED= extras.getString("sp");
      ALT= extras.getString("alt");
      LATDMS= extras.getString("ltDMS");
      LONGDMS= extras.getString("lgDMS");
      ADD= extras.getString("Add");
      TNUM= extras.getString("TNum");


startDate = new Date();
displayToast("Service started at: " + startDate);
new Save().execute("http://192.168.30.1/androidphp/SaveValues.php");

//Here we want this service to continue running until it is explicitly
//stopped, so return sticky

return START_STICKY;

}

每当我运行代码时,它会在

处给出空引用异常
LNGT= extras.getString("lg");

当我评论那部分时,它会移动到下一个和下一个直到结束。当我评论除了第一个以外的所有内容

 LAT= extras.getString("lt"); 

它没有给我这个错误,但它没有任何价值。我不知道自己错过了什么,我不是很好地传递数据,也不能将多个数据传递给像这样的服务。请帮我。 谢谢

3 个答案:

答案 0 :(得分:0)

问题在于你没有将捆绑包传递给你的意图然后你从你的收件人意图中得到一个捆绑包当然会捕获NPE的例外......

<强>溶液

而不是从捆绑中获取它尝试从意图

获取它

示例:

intent.getStringExtra("id");

答案 1 :(得分:0)

它给了NPE,因为你忘了用{}包装if-branch。

Bundle extras = intent.getExtras();
if (extras != null) {
    LAT= extras.getString("lt"); //if no {}, then only this line is in the if-block.
    LNGT= extras.getString("lg");
    SPEED= extras.getString("sp");
    ALT= extras.getString("alt");
    LATDMS= extras.getString("ltDMS");
    LONGDMS= extras.getString("lgDMS");
    ADD= extras.getString("Add");
    TNUM= extras.getString("TNum");
}

答案 2 :(得分:0)

我现在正在使用它,我修改了代码并使用bundle来代替使用intent

传递值
 Intent intent =new Intent(MainActivity.this, SaveService.class);
                  Bundle bundle=new Bundle();             
                  bundle.putString("lt",latituteField.getText().toString().trim() );                    
                  bundle.putString("lg",longitudeField.getText().toString().trim()); 
                  bundle.putString("sp",SpeedField.getText().toString().trim());
                  bundle.putString("alt",AltitudeField.getText().toString().trim());
                  bundle.putString("ltDMS",lbllatitude.getText().toString().trim());
                  bundle.putString("lgDMS",lbllongitude.getText().toString().trim());
                  bundle.putString("Add",AddressLabel.getText().toString().trim());
                  bundle.putString("TNum",TNumber);
                  intent.putExtras(bundle);              
                  startService(intent); 

所以我在我的MainActivity和Service.class中有这个代码,我收到这样的数据

Bundle bundle = intent.getExtras();
      if (bundle != null)
      {
      LAT= (String)bundle.getString("lt");  
      LNGT= (String)bundle.getString("lg");
      SPEED= (String)bundle.getString("sp");
      ALT= (String)bundle.getString("alt");
      LATDMS=(String)bundle.getString("ltDMS");
      LONGDMS= (String)bundle.getString("lgDMS");
      ADD= (String)bundle.getString("Add");
      TNUM= (String)bundle.getString("TNum");

      }

我现在正在获取从MainActivity传递给服务的值,非常好。谢谢大家的支持和线索。我真的很感激。